Python协程总结有哪些关键点?

2026-06-11 06:331阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计4842个文字,预计阅读时间需要20分钟。

Python协程总结有哪些关键点?

Python多线程中因存在GIL(全局解释器锁)的存在,对CPU密集型程序显得很鸡肋;但对IO密集型程序,GIL会在调用IO操作前释放,因此IO密集型多线程仍然有效。

概述

python多线程中因为有GIL(Global Interpreter Lock 全局解释器锁 )的存在,所以对CPU密集型程序显得很鸡肋;但对IO密集型的程序,GIL会在调用IO操作前释放,所以对IO密集型多线程还是挺有作用。

然而多线程是竞争型的,调度由CPU决定,有时会显得没那么容易控制;所以python中也实现了一种可以由程序自己来调度的异步方式,叫做协程。

协程是一种用户态的轻量级线程,又称微线程。

Python协程总结有哪些关键点?

协程拥有自己的寄存器上下文和栈,调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。因此:协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上一次离开时所处逻辑流的位置。

简单说协程在执行某个子程序(函数)时,可以指定或者随机地中断,然后去执行其他的子程序(函数),在合适的时候再返回到中断子程序停止时的状态继续执行。听起像生成器的特性,实际上协程也是基于生成器的。所以协程是通过程序自身的控制,去切换不同任务,实现并发的效果。

阅读全文

本文共计4842个文字,预计阅读时间需要20分钟。

Python协程总结有哪些关键点?

Python多线程中因存在GIL(全局解释器锁)的存在,对CPU密集型程序显得很鸡肋;但对IO密集型程序,GIL会在调用IO操作前释放,因此IO密集型多线程仍然有效。

概述

python多线程中因为有GIL(Global Interpreter Lock 全局解释器锁 )的存在,所以对CPU密集型程序显得很鸡肋;但对IO密集型的程序,GIL会在调用IO操作前释放,所以对IO密集型多线程还是挺有作用。

然而多线程是竞争型的,调度由CPU决定,有时会显得没那么容易控制;所以python中也实现了一种可以由程序自己来调度的异步方式,叫做协程。

协程是一种用户态的轻量级线程,又称微线程。

Python协程总结有哪些关键点?

协程拥有自己的寄存器上下文和栈,调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。因此:协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上一次离开时所处逻辑流的位置。

简单说协程在执行某个子程序(函数)时,可以指定或者随机地中断,然后去执行其他的子程序(函数),在合适的时候再返回到中断子程序停止时的状态继续执行。听起像生成器的特性,实际上协程也是基于生成器的。所以协程是通过程序自身的控制,去切换不同任务,实现并发的效果。

阅读全文