其他 I/O 模型总结

  • 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来优化性能。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容