python进程,线程,协程的区别

协程

协程,又称微线程,纤程。英文名Coroutine。协程,利用线程在等待某个资源的期间执行其他函数,切换资源消耗非常小,协程效率相当快。

协助程序,线程和进程都是抢占性特点,线程和进程之间的切换我们不能参与,协程是非抢占性特点,可以由用户控制切换

1.yield函数–生成器

2.greenlet模块

3.gevent模块

进程、线程、协程的区别?

进程是资源分配的单位,真正执行代码的是线程,操作系统真正调度的是线程。

进程没有线程效率高,进程占用资源多,线程占用资源少,比线程更少的是协程。

协程依赖于线程、线程依赖于进程,进程一死线程必挂,线程一挂协程必死

一般不用多进程,可以考虑使用多线程,如果多线程里面有很多网络请求,网络可能会有堵塞,此时用协程比较合适。

就比如进程,线程,协程可以比喻成一个洗衣间,里面有很多洗衣机,每个洗衣机都有很多功能

或者:

进程:每个人都领一套工具(环境,上下文)去干活,人多(核多)就可以做的更快。

线程:一个人有一套工具后干活,但要干很多工作,先干哪个要听老板的(系统),遇见需要等待的事,老板会叫你先干别的。但老板不明白你干的什么活,比如你挖一个坑埋一个萝卜然后盖上土,结果他让你挖坑,埋土,放萝卜。这时候就要用锁告诉老板这个必须先放了萝卜才能埋土。

协程:一个人有一套工具后干活,但要干很多工作,先干哪个听自己的,同样遇见要等待的事情,你自个会先干别的,比如现在没有萝卜,你就不能盖土,可以继续挖下一个坑,等有萝卜时,执行放萝卜,盖土,对于老板来说,协程内的工作属于一个包的事,他会下命令让你种萝卜,但不会规定你种萝卜的顺序。正是因为省去了老板这一工作量,才大大提高了效率,毕竟是领导的工作量,先洗澡还先吃饭也要问领导不得慢成啥。

:一个人有一套工具后干活,但要干很多工作,先干哪个完全按写好的清单来,遇见要等待的事情,就等他完了再下一个

协程的好处:

无需线程上下文切换的开销

无需原子操作锁定及同步的开销

方便切换控制流,简化编程模型

高并发+高扩展性+低成本:一个CPU支持上万的协程都不是问题。所以很适合用于高并发处理。

缺点:

无法利用多核资源:协程的本质是个单线程,它不能同时将 单个CPU 的多个核用上,协程需要和进程配合才能运行在多CPU上.当然我们日常所编写的绝大部分应用都没有这个必要,除非是cpu密集型应用。

进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序

发布了21 篇原创文章 · 获赞 21 · 访问量 1524

猜你喜欢

转载自blog.csdn.net/Assassin567/article/details/104309345