2020-08-12

进程和线程(个人笔记)

(1)为什么要使用进程?
如果程序在运行的过程中,频繁的请求IO操作,那么CPU就会等待该程序的IO操作完成后再为其服务,这就极大的浪费了CPU资源,降低CPU效率。因此采用一种“程序排队”机制来提高CPU利用效率,从而产生了进程。
为了对排队程序进行有效管理,操作系统使用PCB(进程管理块)记录着每个程序执行的各种信息,包括优先级,程序内存地址,阻塞状态等,这样的一个程序管理就是一个进程。
下图是进程状态转换示意图,当一个进程被创建,它就会进入就绪队列,获取CPU资源,若分配给该进程的时间片到,该进程便会主动放弃CPU进入就绪队列等待下一次时间片到来;若该进程请求IO操作时,也会主动放弃CPU,进入阻塞队列,当IO操作完成后,才会从阻塞队列进入就绪队列。而只有进入就绪队列的进程才能有获取CPU的机会。
在这里插入图片描述
(2)为什么要使用线程?
在这里插入图片描述
如上图,游戏和浏览器应用程序中可能包含多个功能模块,它包含网络功能,键盘输入,UI渲染等等,根据进程队列获取CPU资源的特点,如果游戏中的网络功能要交换网络数据,请求网卡时,那么此时的游戏程序就会自动放弃CPU,浏览器获取CPU,这就会导致游戏程序中的渲染代码暂停执行,游戏画面就会卡顿。

****解决方案一:给程序的不同功能建立进程

如下图,虽然这样的方式可以避免上述所说的问题,但一旦程序内部功能模块较多,那么需要建立的进程较多,操作系统需要分配大量的PCB资源(该资源是有限的),且进程间切换频繁,时间空间开销大。
在这里插入图片描述
解决方案二:线程的“横空出世”
在这里插入图片描述
如上图,给一个应用程序分配一个进程,其对应的功能建立相应的线程,线程之间共享进程资源,创建快,消耗小。

(3)进程与线程比较 区别: (1)进程是操作系统资源分配的基本单位;线程是任务调度和执行的基本单位。 (2)一个程序至少一个进程,一个进程至少一个线程,进程中的多个线程是共享进程的资源。 (3)进程拥有独立的内存单元,而多个线程共享内存。 (4)进程结束后它拥有的所有线程都将销毁,而线程的结束不会影响同个进程中的其他线程的结束。 (5)线程是轻量级的进程,它的创建和销毁所需要的时间比进程小很多,所有操作系统中的执行功能都是创建线程去完成的。