协程和 epoll 这种事件驱动对比,有什么优缺点 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
thomaswang
V2EX    问与答

协程和 epoll 这种事件驱动对比,有什么优缺点

  •  
  •   thomaswang 2018-02-22 23:33:24 +08:00 5624 次点击
    这是一个创建于 2874 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如回射程序(客户端连接服务端,发送数据,服务端接受数据,返回给客户端)

    服务端用协程和单进程 epoll 事件驱动模型对比,各有什么优势

    疑惑 1 协程如果遇到未准备好的 io 会 yield, 谁来发现这个事件到来了呢,这个不像 epoll 可以返回可读可写的描述符,怎么 resume 这个协程,让它继续执行呢

    疑惑 2 协程不能利用多核,单进程 epoll 也不能利用多核啊,是这样吗

    7 条回复    2018-02-24 14:07:13 +08:00
    simple2025
        1
    simple2025  
       2018-02-23 00:24:32 +08:00
    python tornado 的协程就是用 epoll 来搞的,
    lianghh
        2
    lianghh  
       2018-02-23 00:37:19 +08:00   1
    epoll 只是操作系统底层提供的一种多路复用机制,而协程则是更高一层的抽象。因为抽象出了协程这个概念,这样应用层的程序员就无须关心下层如何调度和实现的了,更具通用性。例如 goroutine 就可以使用到多核,你所谓的“协程不能利用多核”是指你所在的平台实现限制导致他不能使用多核,协程本身没有限制。协程 和 epoll 这两者不等同不能去比较,真正应该比较的我觉得是线程和协程。线程由系统调度导致多次陷入内核态,而协程由语言或者框架调度,很多切换都是在用户态完成,性能更加,这也是语言或者框架本身抽象协程的目的。
    cheesea
        3
    cheesea  
       2018-02-23 02:05:19 +08:00
    协程可以通过 epoll 来切换呀。
    epoll 只是当有事件发生时通知你,至于对事件的处理,你可以单进程也可以交给线程或者协程去做,这个不一定要单进程的。这篇文章可以参考下 http://aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html,写的挺好。
    eslizn
        4
    eslizn  
       2018-02-23 03:03:29 +08:00
    1.并不是谁来发现这个事件到来,而是由其他协程 yield 时来重试
    2.是,不过可用通过配合多进程/多线程来解决这个问题,一个进程/线程来接收和响应请求,其他的分配给处理逻辑
    Gathaly
        5
    Gathaly  
       2018-02-23 04:21:44 +08:00   1
    好像不是同一个东西,一个是 IO 模型,一个是类似线程间的调度吧
    thomaswang
        6
    thomaswang  
    OP
       2018-02-23 07:35:59 +08:00
    @chenqh 就拿 tornado(这个我不熟)来说,如果是 epoll 管理所有的描述符,有事件到来时 resume 指定的协程,我觉得这个效率不如
    @eslizn 所说的,epoll+开多进程 /线程处理逻辑,这种即解决了并发,也利用了多核,但是这样可能会过多的切换,还有就是要考虑抢占来的同步和互斥问题, 所以这个协程到底怎么用的呢
    eslizn
        7
    eslizn  
       2018-02-24 14:07:13 +08:00
    @thomaswang 协程本质上并是串行的,所以在协程中是“线程安全”的。我猜测你说的是指跨线程、进程的资源共享、竞争场景,那么可以配合共享内存等方式来解决
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3800 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 460ms UTC 04:15 PVG 12:15 LAX 20:15 JFK 23:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86