日期:2014-05-16  浏览次数:20769 次

关于I/O多路复用与线程的理解
      以下是我对I/O多路复用的理解,请大家看看是否正确。如果有错,请提出来,非常感谢!
      设计并发程序时,采用one event loop per thread的模型,那么I/O多路复用的本质还是单线程。epoll等I/O多路复用模型可以同时监听多个fd,比如同时监听stdin和一个socket。但是,在对多个产生事件的fd进行处理的时候,程序的处理流程依旧是顺序且依次处理发生事件的fd的,这个阶段在本质上依旧是阻塞且同步的。所以,non-blocking IO就可以在这时发挥作用,比如非阻塞的socket,等等。
      在一篇文章中看到,"I/O复用"其实复用的不是IO连接,而是复用线程。在复用线程的基础上,处理多个fd的时候依旧是顺序执行的。这一点该如何理解呢?

------解决方案--------------------
一个线程同时兼顾多个fd,如果这些fd都有事件发生时,这个线程就需要依次顺序处理了