线程的概念
进程
进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。
进程一般由程序、数据集合和进程控制块三部分组成,程序用于描述进程要完成的功能,是控制进程执行的指令集;数据集合是程序在执行时所需要的数据和工作区;程序控制块包含进程的描述信息和控制信息,唯一标识一个进程。
进程的特征
动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;
并发性:一个进程可以和其它进程并发执行(多核cpu);
独立性:各个进程之间是独立的,进程是系统进行资源分配和调度的一个独立单位,;
结构特点:进程由程序、数据和进程控制块三部分组成
进程的三种基本状态
(1)就绪(ready)
当一个进程已经准备就绪,一旦得到cpu,就可立即运行,这时进程所处的状态称为就绪状态。系统中有一个就绪进程队列,处于就绪状态进程按某种调度策略存在于该队列中。
(2)运行(running)
当进程获取到cpu的时间片,开始执行代码,处于运行状态。时间片用完,回到就绪状态。
单核cpu,一个时刻最多只有一个进程处于运行状态;多核cpu,一个时刻最多可以有多个(cpu数量)进程处于运行状态。
(3)阻塞(blocked )
一个进程正等待着某一事件发生(如等待输入输出操作的完成)而暂时停止执行
处于等待状态的进程不具备运行的条件,即使给它时间片,也无法执行。
运行到阻塞:等待某事件的发生、完成(如等待i/o完成)
阻塞到就绪:事件已经发生、完成(如i/o完成)
运行到就绪:时间片用完或出现更高优先级进程,当前进程*让出cpu。
就绪到运行:调度(分派)程序从就绪进程队列中选择一个进程来使用cpu,获取到cpu的时间片。
这三种是进程最基本的状态,实际并不止这三种状态。
进程与程序的联系与区别
1、程序是指令的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。
2、程序可以作为一种软件资料长期存在,而进程是有一定生命期的。程序是永久的,进程是暂时的。
3、进程和程序组成不同:进程是由程序、数据和进程控制块三部分组成
4、 进程与程序的对应关系:通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。
线程
线程是程序执行的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程(至少有一个),各个线程之间共享所在进程的内存空间。
一个标准的线程由线程id,当前指令指针pc,寄存器和堆栈组成。而进程由内存空间(代码,数据,进程空间,打开的文件)和一个或多个线程组成。
进程与线程的区别
1. 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位
2. 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线
3. 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段,数据集,堆等)及一些进程级的资源(如打开文件和信号等),一个进程内的线程对其他进程不可见
4. 调度和切换:线程上下文切换比进程上下文切换要快得多
线程和进程都可用于实现并发,线程是一种比进程更小的程序执行单位。
为何不使用多进程而是使用多线程?
1、线程廉价,启动、退出比较快,需要的系统资源比进程少很多,且可以共享程序的内存空间(资源)
2、多重进程的运行不可预期,且测试困难
上一篇: C++抓图服务