秋招之路-关于进程、线程、协程的一些见解_数据

[图]Thread, process, coroutine 

2019-07-03


这是 herongwei 的第 74 篇原创

阅读本文大概需要 5 分钟


前言


进程、线程、协程的概念和区别傻傻分不清?希望这篇文章能帮助你。


1、举一个贴近现实生活的例子


贺老板,想要开个工厂,进行生产某件商品(例如手机壳)。


他需要花一些财力物力制作一条生产线,这个生产线上有很多的器件以及材料,这些所有的为了能够生产手机壳而准备的资源称之为:进程


只有生产线是不能够进行生产的,所以贺老板必须找个工人来进行生产,这个工人能够利用这些材料最终一步步的将手机壳做出来,这个负责具体事情的工人称之为:线程


贺老板为了提高生产率,想到 3 种办法:


(1)在这条生产线上多招些工人,一起来做手机壳,这样效率达到成倍増长。

这就是单进程多线程方式。


(2)贺老板发现,这条生产线上的工人不是越多越好,因为一条生产线的资源以及材料毕竟有限,所以贺老板又花了些财力物力购置了另外一条生产线,然后再招些工人,这样效率又一步提高了。

这就是多进程多线程方式


(3)有一天,贺老板发现,现在已经有了很多条生产线,并且每条生产线上已经有很多工人了(可以类比于程序是多进程的,每个进程中又有多个线程)。


为了再次提高效率,贺老板做了一个规定:如果某个员工在上班时临时没事或者在等待某些条件(比如等待另一个工人生产完某道工序 之后他才能再次工作),那么这个员工就利用这个时间去做其它的事情,也就是说:如果一个线程等待某些条件,可以充分利用这个时间段去做其它事情。

其实这就是:协程方式。




2、总结


1. 进程和线程的区别


(1)基本单位


进程是资源分配的基本单位。


进程控制块 (Process Control Block, PCB) 描述进程的基本信息和运行状态。


PCB 是为了管理进程设置的一个数据结构。是系统感知进程存在的唯一标志。


通常包含如以下的信息:


  1. 进程标识符(唯一);
  2. 进程当前状态,通常同一状态的进程会被放到同一个队列;
  3. 进程的程序和数据地址;
  4. 进程资源清单。列出所拥有的除 CPU 以外的资源记录;
  5. 进程优先级。反应进程的紧迫程度;
  6. CPU 现场保护区。记录中断时的 CPU 状态;
  7. 进程队列的 PCB 的链接字;
  8. 进程相关的其他信息。如占用 CPU 多长时间等。



所谓的创建进程和撤销进程,都是指对 PCB 的操作。


线程是独立调度的基本单位。


一个进程中可以有多个线程,它们共享进程资源。


QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 HTTP 请求线程、事件响应线程、渲染线程等等,线程的并发执行使得在浏览器中点击一个新链接从而发起 HTTP 请求时,浏览器还可以响应用户的其它事件。


(2)拥有资源


进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问隶属进程的资源。


(3)调度


线程是独立调度的基本单位,在同一进程中,线程的切换不会引起进程切换,从一个进程中的线程切换到另一个进程中的线程时,会引起进程切换。


(4)系统开销


由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O 设备等,所付出的开销远大于创建或撤销线程时的开销。类似地,在进行进程切换时,涉及当前执行进程 CPU 环境的保存及新调度进程 CPU 环境的设置,而线程切换时只需保存和设置少量寄存器内容,开销很小。


(5)通信方面


线程间可以通过直接读写同一进程中的数据进行通信,但是进程通信需要借助 IPC。



2. 协程和线程的区别


协程和线程的区别是:协程避免了无意义的调度,由此可以提高性能,但也因此,程序员必须自己承担调度的责任,同时,协程也失去了标准线程使用多 CPU 的能力。


3. 三者的区别


进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。


线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的)。


协程和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度。


协程切换任务资源很小,效率高。


多进程、多线程根据 cpu 核数不一样可能是并行的,但是协程是在一个线程中,所以是并发运行。


今天的知识点,你学会了吗?

关于进程、线程、协程,我也是略懂皮毛,有问题,欢迎和我一起交流~


参考:

​https://github.com/CyC2018/CS-Notes/tree/master/docs/notes​




秋招之路-关于进程、线程、协程的一些见解_多线程_02

认真的人,自带光芒!

原创不易

点个呗

秋招之路-关于进程、线程、协程的一些见解_系统调度_03