python 中协程能否全面替代线程

2014-12-28 23:54:46 +08:00
 ShiehShieh
python由于GIL的实现原因,多线程无法利用多核优势,当然,仍然有效解决了IO阻塞问题。那么协程与多线程相比,少了上下文切换的开销,虽然一样都是单核工作,是不是使用协程能够有效替代多线程呢?
新人对这个问题想的不是很明白,在看更多文献之前来问问v2ex。
4748 次点击
所在节点    Python
7 条回复
ShiehShieh
2014-12-29 00:01:32 +08:00
比如使用greenlet代替使用线程。
mhycy
2014-12-29 00:14:24 +08:00
个人认为很多地方都可代替...
事实上也有很多项目是这么做的
但是是否存在不可代替的情况,也不能否认有这种情况存在的可能性
lee0100317
2014-12-29 09:45:15 +08:00
IO消耗型操作可以,反之cpu消耗型操作不可以
ShiehShieh
2014-12-29 12:42:15 +08:00
@lee0100317 可是CPU消耗性本身线程也没有优势啊。相反,协程还能够省下context-switch的开销,减少死锁,竞争。不是更应该使用协程代替线程么?
toooddchen
2014-12-29 15:12:17 +08:00
py的多线程在cpu密集的应用中, 速度比单线程显著的慢.

现在看, 除了 1) 运行的任务线程需要被os感知到. 2) 任务中包含阻塞的调用. 这两种情况外,

线程没什么不能被协程替代的.
jamiesun
2014-12-29 20:26:12 +08:00
用了这么多年python,使用多线程的次数几乎忽略不计,更多的是使用协程多进程。曾经还以为pyqt的qthread是可以利用多核的,后来查证也不是。在正经的环境中多线程没有什么优势。
Zuckonit
2014-12-31 10:01:22 +08:00
协程+多进程

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/157439

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX