“IO 多路复用”是编程中经常出现的技术词汇,经常使用这种技术的框架有很多,如,Redis、Kafka、Netty、Nginx 中都用到了此技术。那疑问来了,什么是 IO 多路复用?它的详细成功技术有哪些?这些技术之间有什么区别?当天咱们就来便捷的讨论一下。
IO 多路复用技术是一种准许单个线程治理多个网络衔接的技术,它使得主机能够高效地处置少量的并发衔接而不须要为每个衔接创立一个独立的线程或进程。
构想假设客户端有不可胜数个的状况下,那么非 IO 多路复用就会有不可胜数个线程,那么就会出现 IO 适度争抢和多线程切换的疑问,由于 CPU 资源只要几个,而要口头的线程却有不可胜数个。
罕用的 IO 多路复用成功技术有:select、poll、epoll 和 kqueue 等,它们的详细引见如下。
文件形容符数量受限 :通常限度为 1024 个,可以经过修正系统参数来参与这个限度,但这样做会消耗更多的系统资源。
效率低下 :每次调用 select 都须要将文件形容符列表复制到内核,审核完后又须要复制回用户空间,这关于少量文件形容符来说效率很低。
不支持边缘触发形式 :只支持水平触发形式。
好处 :缩小了系统调用次数,提高了效率,特意适宜于大数据量传输的场景。
缺陷 :要求运行程序必需在接纳到事情后尽或者多地读取或写入数据,否则或者会错事先续的数据。因此,边缘触发形式对编程的要求较高,须要愈加小心肠处置。
有数量限度 :没有文件形容符数量限度。
高效 :只要生动的文件形容符才会被传递给用户空间,缩小了不用要的复制操作。
配置弱小 :支持边缘触发和水平触发两种上班形式。
配置更弱小 :不只支持文件形容符的事情通知,还能处置其余类型的事情。
性能低劣 :与 epoll 相似,只要生动的文件形容符才会被处置,从而提高了效率。
select、poll、epoll 和 kqueue 之间的区别如下:
技术称号 |
支持平台 |
衔接数限度 |
IO效率 |
数据拷贝形式 |
跨平台 |
自动1024 |
每次调用都拷贝 |
||
跨平台 |
无 |
每次调用都拷贝 |
||
Linux 特有 |
无 |
仅在 epoll_ctl 时拷贝 |
||
MacOS、FreeBSD 等 |
无 |
详细成功形式或者因系统而异,但通常也是高效的。 |
什么叫做“文件形容符”?IO 多路复用为什么要启动“数据拷贝”?
本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载联系作者并注明出处:https://duobeib.com/diannaowangluoweixiu/7384.html