国产化驱动经济自主性与科技创新的未来之路
870
2022-10-12
秋招之路-关于进程、线程、协程的一些见解
[图]Thread, process, coroutine
2019-07-03
阅读本文大概需要 5 分钟
前言
进程、线程、协程的概念和区别傻傻分不清?希望这篇文章能帮助你。
1、举一个贴近现实生活的例子
贺老板,想要开个工厂,进行生产某件商品(例如手机壳)。
他需要花一些财力物力制作一条生产线,这个生产线上有很多的器件以及材料,这些所有的为了能够生产手机壳而准备的资源称之为:进程
只有生产线是不能够进行生产的,所以贺老板必须找个工人来进行生产,这个工人能够利用这些材料最终一步步的将手机壳做出来,这个负责具体事情的工人称之为:线程
贺老板为了提高生产率,想到 3 种办法:
(1)在这条生产线上多招些工人,一起来做手机壳,这样效率达到成倍増长。
这就是单进程多线程方式。
(2)贺老板发现,这条生产线上的工人不是越多越好,因为一条生产线的资源以及材料毕竟有限,所以贺老板又花了些财力物力购置了另外一条生产线,然后再招些工人,这样效率又一步提高了。
这就是多进程多线程方式。
(3)有一天,贺老板发现,现在已经有了很多条生产线,并且每条生产线上已经有很多工人了(可以类比于程序是多进程的,每个进程中又有多个线程)。
为了再次提高效率,贺老板做了一个规定:如果某个员工在上班时临时没事或者在等待某些条件(比如等待另一个工人生产完某道工序 之后他才能再次工作),那么这个员工就利用这个时间去做其它的事情,也就是说:如果一个线程等待某些条件,可以充分利用这个时间段去做其它事情。
其实这就是:协程方式。
2、总结
1. 进程和线程的区别
(1)基本单位
进程是资源分配的基本单位。
进程控制块 (Process Control Block, PCB) 描述进程的基本信息和运行状态。
PCB 是为了管理进程设置的一个数据结构。是系统感知进程存在的唯一标志。
通常包含如以下的信息:
进程标识符(唯一);进程当前状态,通常同一状态的进程会被放到同一个队列;进程的程序和数据地址;进程资源清单。列出所拥有的除 CPU 以外的资源记录;进程优先级。反应进程的紧迫程度;CPU 现场保护区。记录中断时的 CPU 状态;进程队列的 PCB 的链接字;进程相关的其他信息。如占用 CPU 多长时间等。
所谓的创建进程和撤销进程,都是指对 PCB 的操作。
线程是独立调度的基本单位。
一个进程中可以有多个线程,它们共享进程资源。
(2)拥有资源
进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问隶属进程的资源。
(3)调度
线程是独立调度的基本单位,在同一进程中,线程的切换不会引起进程切换,从一个进程中的线程切换到另一个进程中的线程时,会引起进程切换。
(4)系统开销
由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O 设备等,所付出的开销远大于创建或撤销线程时的开销。类似地,在进行进程切换时,涉及当前执行进程 CPU 环境的保存及新调度进程 CPU 环境的设置,而线程切换时只需保存和设置少量寄存器内容,开销很小。
(5)通信方面
线程间可以通过直接读写同一进程中的数据进行通信,但是进程通信需要借助 IPC。
2. 协程和线程的区别
协程和线程的区别是:协程避免了无意义的调度,由此可以提高性能,但也因此,程序员必须自己承担调度的责任,同时,协程也失去了标准线程使用多 CPU 的能力。
3. 三者的区别
进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。
线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的)。
协程和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度。
协程切换任务资源很小,效率高。
多进程、多线程根据 cpu 核数不一样可能是并行的,但是协程是在一个线程中,所以是并发运行。
今天的知识点,你学会了吗?
关于进程、线程、协程,我也是略懂皮毛,有问题,欢迎和我一起交流~
参考:
https://github.com/CyC2018/CS-Notes/tree/master/docs/notes
认真的人,自带光芒!
点个呗
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~