python中进程、线程、协程比较(多角度对比)

搜集网上资料,自己对进程、线程、协程进行的整理和总结。

 

进程、线程、协程比较

 

进程

线程

协程

关系

一个进程至少有一个线程,进程里面可以有多个线程

一个线程里面可以有多个协程

线程和进程的操作是由程序触发系统接口,最后的执行者是系统;协程的操作则是程序员。

 

进程是资源分配的单位

 

进程切换需要的资源最大,效率很低,但有利于资源的保护和管理

 

进程在执行过程中拥有独立的内存单元

线程是操作系统调度的单位

 

线程切换需要的资源一般,效率一般(当然了在不考虑GIL的情况下)

 

多个线程共享内存,从而极大地提高了程序的运行效率

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

 

对于多线程应用,CPU通过切片的方式来切换线程间的执行,线程切换时需要耗时(保存状态,下次继续)。协程,则只使用一个线程,在一个线程中规定某个代码块执行顺序。

优势

一个子进程崩溃并不会影响其他子进程和主进程的运行

切换快,资源消耗低

避免无意义调度从而提高性能;高并发+高扩展性+低成本
缺点

不能一次性启动太多进程,会严重影响系统的资源调度

一个线程挂掉则会影响到所有线程,所以不够稳定

无法利用多核资源;进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序

 

multiprocessing库

threading库:线程池

gevent库

 

多进程、多线程根据cpu核数不一样可能是并行的

多进程、多线程根据cpu核数不一样可能是并行的

协程是在一个线程中,所以是并发;单线程异步

适用场景

多进程适合在 CPU 密集型操作(cpu 操作指令比较多,如位数多的浮点运算)。

多线程适合在 IO 密集型操作(读写数据操作较多的,比如爬虫)

当程序中存在大量不需要CPU的操作时(IO),适用于协程;强调非阻塞异步并发的一般都是使用协程;Web应用

进程、线程、协程对比

请仔细理解如下的通俗描述

• 有一个老板想要开个工厂进行生产某件商品(例如剪子)

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

• 只有生产线是不能够进行生产的,所以老板的找个工人来进行生产,这个工人能够利用这些材料最终一步步的将剪子做出来,这个来做事情的工人称之为:线程

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

1. 在这条生产线上多招些工人,一起来做剪子,这样效率是成倍増长,即单进程 多线程方式

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

3. 老板发现,现在已经有了很多条生产线,并且每条生产线上已经有很多工人了(即程序是多进程的,每个进程中又有多个线程),为了再次提高效率,老板想了个损招,规定:如果某个员工在上班时临时没事或者再等待某些条件(比如等待另一个工人生产完某道工序 之后他才能再次工作) ,那么这个员工就利用这个时间去做其它的事情,那么也就是说:如果一个线程等待某些条件,可以充分利用这个时间去做其它事情,其实这就是:协程方式

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python进程线程协程是实现并发编程的不同方式。 1. 进程(Process)是操作系统分配资源的基本单位,每个进程有独立的内存空间,互不干扰。进程之间的通信需要使用特定的机制,如管道、消息队列等。在Python,可以使用`multiprocessing`模块创建和管理进程。 2. 线程(Thread)是进程内的独立执行流,一个进程可以包含多个线程,它们共享相同的内存空间。线程之间的通信比进程更方便,可以使用共享内存或者全局变量。然而,由于全局解释器锁(GIL)的存在,同一时间只有一个线程在执行Python字节码,因此多线程在CPU密集型任务并不能提高性能。但是对于I/O密集型任务,多线程可以提升效率。Python内置的`threading`模块提供了对线程的支持。 3. 协程(Coroutine)是一种轻量级的线程,由程序控制在特定位置进行挂起和恢复的并发执行。协程能够在执行过程被暂停和继续,并且可以通过yield语句进行交互式通信。Python协程通过生成器函数(generator function)和`asyncio`库来实现。 总结一下: - 进程是资源分配的基本单位,进程之间资源独立,通信复杂。 - 线程进程内的执行流,共享内存,通信相对方便,但受到GIL的限制。 - 协程是一种轻量级的线程,可以在特定位置挂起和恢复执行,并通过yield语句进行通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值