python中线程和协程的区别: 1、一个线程可以有多个协程,这样python中就可以使用多核CPU; 2、线程是同步机制,协程是异步的; 3.协程可以保留最后一次调用的状态,每次进程重入,就相当于进入了最后一次调用的状态。
一、首先我们来了解一下线程和协程的概念
1、线程
线程是进程的一个实体,是CPU调度和调度的基本单位。它是一个比可以独立运行的进程更小的基本单元。线程本身基本上不拥有系统资源,而只有少数运行中必不可少的资源。 (例如程序计数器,一组寄存器和堆栈),但它可以与属于同一进程的其他线程共享该进程拥有的所有资源。线程间通信主要通过共享内存进行,上下文切换速度快,资源开销少,但相对于进程而言,稳定性较差,容易丢失数据。
2、协程
协程是用户态的轻量级线程,协程的调度完全由用户控制。协程有自己的寄存器上下文和堆栈。当协程调度切换时,将寄存器上下文和堆栈保存到其他地方。切换回来的时候,恢复之前保存的寄存器上下文和堆栈,直接操作堆栈,没有内核切换的开销,并且可以访问全局变量而无需加锁。 ,所以上下文切换非常快。
二、协程与线程的比较
1)一个线程可以有多个协程,一个进程也可以单独有多个协程,这样python就可以使用多核CPU。
2) 线程进程都是同步机制,而协程则是异步。
3)协程可以保留上次调用的状态,每次进程重入,就相当于进入了上次调用的状态。
三、线程、协程在python中的使用
1、多线程一般使用线程库来完成一些IO密集型的并发操作。多线程的优点是切换速度快,资源消耗低,但是如果一个线程挂了,会影响所有线程,所以不够稳定。实际上,使用线程池的场景有很多。详细请参考《Python线程池实现》。
2.协程一般使用gevent库。当然这个库用起来比较麻烦,所以用的不多。相反,tornado 中协程的使用要多得多。使用协程使tornado单线程异步,据说也能解决C10K的问题。因此,协程最常用的地方是在 Web 应用程序中。
总结一下:
IO密集型一般采用多线程或多进程,CPU密集型一般采用多进程,强调非阻塞异步并发的一般采用协程。当然,有时需要多进程线程池的组合或其他组合。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 如何检查python是否安装10/06
- ♥ 如何在python中表示小数?09/21
- ♥ python报找不到main函数的错误如何解决11/29
- ♥ python和java哪个难学08/23
- ♥ 获取python元组元素的方法有哪些09/11
- ♥ python输出如何不换行?09/29
内容反馈