【Python】进程、线程、协程对比
2024-09-04 00:58:06
请仔细理解如下的通俗描述
- 有一个老板想要开个工厂进行生产某件商品(例如剪子)
- 他需要画一些财力物力制作一条生产线,这个生产线上有很多的器件以及材料这些所有的为了能够生产剪子而准备的资源称之为:进程
- 只有生产线是不能够进行生产的,所以老板得找个工人来进行生产,这个工人能够利用这些材料最终一步步的将剪子做出来,这个来做事情的工人称之为:线程
- 这个老板为了提高生产率,想到了3种办法
- 在这条生产线上多招些工人,一起来做剪子,这样效率是成倍增长,即单进程多线程方式
- 老板发现这条生产线上的工人不是越多越好,因为一条生产线的资源以及草料毕竟有限,所以老板又花了些财力物理购置了另外一条生产线,然后再招些工人这样效率又再一步提高了,即多进程,多线程方式
- 老板发现,现在已经又和很多条生产线,并且每条生产线上已经有很多工人了(即程序是多进程的,每个进程中又有多个线程),为了再次提高效率,老板想了个损招,规定:如果某个员工在上班时没事或者再等待某些条件(比如等待另一个生产完谋道工序之后他才能再次工作),那么这个员工就利用这个时间去做其它的事情,那么也就是说:如果一个线程等待默写条件,可以充分利用这个时间去做其它事情,其实这就是协程方式
简单总结
- 进程是资源分配的单位
- 进程是操作系统调度的单位
- 进程切换需要的资源量最大,效率很低
- 线程切换需要的资源一般,效率一般(当然了,再不考虑GIL的情况下)
- 协程切换任务资源小,效率高
- 多进程,多线程跟进cpu核数不一样可能是并行的,但是协程是一个线程中所以是并发
最新文章
- PHP中常见魔术方法解析
- Qt之添加QLabel的点击事件
- 堆排序算法 java 实现
- 解决Spine骨骼混合动画错乱问题
- c#常用的Datable转换为json,以及json转换为DataTable操作方法
- Android开发 设置开机自动启动
- FPGA中latency与delay概念的区别
- 转:理解 Linux 的硬链接与软链接
- codewars-random(4)
- maven下载,安装与eclipse中maven配置
- (MariaDB)MySQL内置函数大全
- [HNOI 2001]软件开发
- Redis 设计与实现 (二)--数据库
- 使用Python进行并发编程
- 谈谈MySQL优化原理
- Houdini技术体系 基础管线(三) :UE4以选择区域的方式对地形做生成和更新 上篇
- hdoj:2031
- 不同.NET Framework版本下ASP.NET FormsAuthentication的兼容性
- 想搞机器学习,不会特征工程?你TM逗我那!
- kafka的javaapi生产者生产消息,消费者获取不到