V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
ShiehShieh
V2EX  ›  Python

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

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

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

    线程没什么不能被协程替代的.
    jamiesun
        6
    jamiesun  
       2014-12-29 20:26:12 +08:00   ❤️ 1
    用了这么多年python,使用多线程的次数几乎忽略不计,更多的是使用协程多进程。曾经还以为pyqt的qthread是可以利用多核的,后来查证也不是。在正经的环境中多线程没有什么优势。
    Zuckonit
        7
    Zuckonit  
       2014-12-31 10:01:22 +08:00
    协程+多进程
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1155 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:23 · PVG 02:23 · LAX 11:23 · JFK 14:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.