Python 中线程和协程的区别是什么

查看 56|回复 6
作者:pureGirl   
python 中有 GIL 所以不支持多个线程同时运行,那协程又是什么和线程的区别是什么

线程, 协程, gil

crackidz   
https://en.wikipedia.org/wiki/Coroutine
crab   
https://superfastpython.com/python-concurrency-choose-api/
w568w   
1. python 中有 GIL 所以不支持多个线程同时运行
2. 协程又是什么和线程的区别是什么
我怎么没看懂前后关系?
正经回答:「协程」是一个过度滥用的概念(以及营销术语),你不说清楚具体语境,就有一百种不同的解释。
掰扯这个词本身没什么意思,先说明白你想问的对象是什么。
pursuer   
协程的切出点是可以确认的,所以考虑 data race 这类问题时会简单很多,协程的栈(当然我是指把闭包变量当做等价的栈)通常比线程小而且更加灵活
julyclyde   
线程是一个操作系统概念,是拥有 pid 的
协程是一种语法结构
zhangyb123   
python 在 GIL 的实现下,其多线程的并发可以理解为一个单核设备上不同的线程切换着运行,并不会像多核设备下多个线程并行执行。且 python 会每 5ms 就对占据 GIL 后正在运行的线程进行调度。即停止其运行,释放 GIL ,并重新调度其他线程抢占 GIL 后运行,这种行为是根据操作系统的线程机制来实现的。
而协程,其实是应用层的一个机制,和操作系统无关,就是通过 yield 关键字,将程序逻辑切分,但是无论怎么编写,协程始终是在同一个线程里运行的。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部