python进程线程协程区别,python的协程和多线程
python中线程和协程的区别:1。一个线程可以有多个协程,这样多核CPU可以用python2.线程是同步机制,而进程是异步的;3.协同学可以保持上次调用的状态,每次进程重新进入,就相当于进入了上次调用的状态。
一、首先我们来了解一下线程和协程的概念
1.线
线程是一个进程的实体,是CPU调度和分派的基本单位,是一个比可以独立运行的进程更小的基本单位。一个线程本身基本上不拥有系统资源,只是拥有一些运行所必需的资源(比如程序计数器、一组寄存器和堆栈),但它可以将一个进程拥有的所有资源与属于同一进程的其他线程共享。线程间通信主要是通过共享内存,上下文切换快,资源开销低,但相比进程不稳定,容易丢失数据。
2.协同学
教练是用户态的轻量级线程,其调度完全由用户控制。协同进程有自己的寄存器上下文和堆栈。当协调调度切换时,寄存器上下文和堆栈被保存到其他地方,当它被切换回来时,先前保存的寄存器上下文和堆栈被恢复。栈的直接操作基本没有内核切换开销,全局变量可以不加锁访问,所以上下文切换非常快。
二、协程与线程的比较
1)一个线程可以有多个协程,一个进程可以分别有多个协程,这样就可以在python中使用多核CPU。
2)线程进程是同步机制,而协程是异步的。
3)协程可以保持上次调用的状态,每次进程重新进入,就相当于进入了上次调用的状态。
三、线程、协程在python中的使用
1.多线程一般使用线程库来完成一些IO密集型的并发操作。多线程的优点是切换快,资源消耗低。但是如果一个线程挂了,会影响到所有线程,所以不够稳定。在现实中,会有很多使用线程池的场景。详情请参考《python线程池实现》。
2.gevent库通常用于协作流程。当然这个库用起来比较麻烦,所以很多方面都没有用到。相反,协同学在《龙卷风》中的应用要多得多。用协同学让tornado单线程异步据说解决了C10K的问题。因此,协作流程最常见的用途是在web应用程序中。
总结一下:
IO密集型一般用多线程或多进程,CPU密集型一般用多进程,强调非阻塞异步并发的一般用协进程。当然,有时候需要多进程线程池组合,或者需要其他组合。
推荐课程:Python Advanced高级视频教程
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。