美文网首页
其他 I/O 模型总结

其他 I/O 模型总结

作者: linanwx | 来源:发表于2017-12-21 14:18 被阅读0次
    • I/O 多路复用
    • 信号驱动I/O
    • Linux专有epoll

    I/O多路复用

    通过select系统调用或者poll系统调用,来对文件描述符进行检查。

    • select函数
      int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeval *timeout);
      参数分别的意思是:需要测试的fd范围0~fd-1,满足三种情况要求的文件描述符号,超时时间。
    • poll函数
      int poll(struct pollfd fds[], nfds_t nfds, int timeout);
      参数分别是:元素包含文件描述符、需要检查的状态、返回的状态的一个数组,数组长度以及超时时间。

    二者的区别在于poll里面传进去的数组大小不受fd_set定义的大小限制。poll的events和revents更丰富一些。select用的更为广泛一些。新版中select的性能经过优化与poll差不多。

    • epoll函数
      epoll函数包括三个API:epoll_create()、epoll_ctl()、epoll_wait()三个调用。
      epoll是三个调用中性能最好,效果最多的。但是只有Linux才可以使用。

    主要是因为服务器上面会连接多个socket链接,如果为每一个套接字建立一个线程的话,会比较占用资源,所以需要使用epoll来优化性能。

    相关文章

      网友评论

          本文标题:其他 I/O 模型总结

          本文链接:https://www.haomeiwen.com/subject/dynbwxtx.html