前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >I/O多路复用

I/O多路复用

作者头像
黑洞代码
发布2021-01-14 15:35:55
1.3K0
发布2021-01-14 15:35:55
举报
文章被收录于专栏:落叶飞翔的蜗牛

IO多路复用技术把多个IO的阻塞复用到同一个select的阻塞上,使得系统在单线程的情况下可以同时处理多个客户端请求。

与多线程相比,IO多路复用技术降低系统开销,不需要创建新的额外进程或者线程,节省了系统资源。

目前支持IO多路复用的系统调用有select、pselect、poll和epoll。

epoll相对于select的改进:

1.一个进程打开的socket描述符(fd)不受限制(受限于操作系统最大文件句柄数)。

select单进程打开的最大的fd是有限制的,默认是1024个,对于需要支持上万TCP连接的服务器来说太少了。

epoll没有这个限制,支持的最大fd上限是操作系统最大文件句柄数。1G内存的机器大约是10万个句柄。

2.IO效率不会随着FD增加而线性下降

select和poll缺点是当有很大的socket集合时,任意时刻只有少部分的socket是活跃的,select和poll每次调用都会扫描全部集合,导致效率下降。

epoll不存在以上问题。epoll根据每个fd上的callback实现。只有活跃的socket才会调用callback函数。

3.使用mmap加速内核与用户空间的消息传递

epoll通过内核和用户空间mmap同一块内存来实现消息传递。mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。

4.epoll的API更简单

创建epoll描述符、添加监听事件、阻塞等待监听事件的发生 、关闭epoll描述符等。

克服select和poll有很多。epoll是Linux系统的实现方案。在FreeBSD下游kqueue,Solaris的解决方案是dev/poll。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 落叶飞翔的蜗牛 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档