IO模型

前言

  • 现在包括C++(asio)已经把网络封装的很简单了,看不到select/poll/epoll/iocp这些就不是很关注了
  • 其实这些知识还挺重要,至少看那些开源东西介绍的时候了解为什么,或者很多开源选择的时候知道如何选择
  • 异步IO是指网络IO,关注性能的时候磁盘IO也是经常要留意的点,但是kernel并没有disk IO的解决方案,

关键词

  • BIO(block-io): 同步阻塞IO。send/recv阻塞调用,如果开线程while(true),意味着想要多个session无差别就要开和session 1:1 数量的线程数。基本不会用这种方式
  • NIO(non-block-io): 同步非阻塞IO。相对BIO *N线程的方式,这里用一个线程轮询所有session(fd),判断是否有新的数据,也就是一个没有事件的fd也会被遍历一下,试想如果服务器维护一个很长的队列,这个遍历不仅耗CPU,还容易出现处理不及时。
  • IO 多路复用 (系统提供的)
    • select:维护了一个FD_SETSIZE(默认1024)的fds列表,轮询所有fd检查有没有事件,和NIO类似的问题
    • poll:相比select没有了FD_SETSIZE的列表长度限制
    • epoll:

参考

------ 本文结束 ------
------ 版权声明:转载请注明出处 ------