知行编程网知行编程网  2022-11-19 09:30 知行编程网 隐藏边栏  23 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于在python中线程和协程的区别是什么的相关知识,希望可以帮到处于编程学习途中的小伙伴

python中线程和协程的区别: 1、一个线程可以有多个协程,这样python中就可以使用多核CPU; 2、线程是同步机制,协程是异步的; 3.协程可以保留最后一次调用的状态,每次进程重入,就相当于进入了最后一次调用的状态。

python中的线程和协程有什么区别



一、首先我们来了解一下线程和协程的概念

1、线程

线程是进程的一个实体,是CPU调度和调度的基本单位。它是一个比可以独立运行的进程更小的基本单元。线程本身基本上不拥有系统资源,而只有少数运行中必不可少的资源。 (例如程序计数器,一组寄存器和堆栈),但它可以与属于同一进程的其他线程共享该进程拥有的所有资源。线程间通信主要通过共享内存进行,上下文切换速度快,资源开销少,但相对于进程而言,稳定性较差,容易丢失数据。

2、协程

协程是用户态的轻量级线程,协程的调度完全由用户控制。协程有自己的寄存器上下文和堆栈。当协程调度切换时,将寄存器上下文和堆栈保存到其他地方。切换回来的时候,恢复之前保存的寄存器上下文和堆栈,直接操作堆栈,没有内核切换的开销,并且可以访问全局变量而无需加锁。 ,所以上下文切换非常快。



二、协程与线程的比较

1)一个线程可以有多个协程,一个进程也可以单独有多个协程,这样python就可以使用多核CPU。

2) 线程进程都是同步机制,而协程则是异步。

3)协程可以保留上次调用的状态,每次进程重入,就相当于进入了上次调用的状态。



三、线程、协程在python中的使用

1、多线程一般使用线程库来完成一些IO密集型的并发操作。多线程的优点是切换速度快,资源消耗低,但是如果一个线程挂了,会影响所有线程,所以不够稳定。实际上,使用线程池的场景有很多。详细请参考《Python线程池实现》。

2.协程一般使用gevent库。当然这个库用起来比较麻烦,所以用的不多。相反,tornado 中协程的使用要多得多。使用协程使tornado单线程异步,据说也能解决C10K的问题。因此,协程最常用的地方是在 Web 应用程序中。



总结一下:

IO密集型一般采用多线程或多进程,CPU密集型一般采用多进程,强调非阻塞异步并发的一般采用协程。当然,有时需要多进程线程池的组合或其他组合。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享