首页 > 其他 > 详细

IO多路复用机制:select、poll、epoll的区别

时间:2019-06-04 16:01:19      阅读:134      评论:0      收藏:0      [点我收藏+]

IO多路复用机制:select、poll、epoll的区别

1.单个进程打开的文件描述符(fd文件句柄)不一致

? select :有最大连接数限制数为1024,单个进程所能打开的最大连接数由FD_ZETSIZE宏定义。

? poll:poll本质上与select没有区别,但是它没有最大连接数的限制,原因是它是基于链表来存储的。

? epoll:虽然连接有上限,但是很大,1G内存的机器可以打开10万左右的连接,以此类推。

2.监听Socket的方式不一致

select :轮询的方式,一个一个的socket检查过去,发现有socket活跃时才进行处理,当线性socket增多时,轮询的速度将会变得很慢,造成线性造成性能下降问题。

poll:对select稍微进行了优化,只是修改了文件描述符,但是监听socket的方式还是轮询。

expoll:epoll内核中实现是根据每个fd上的callback函数来实现的,只有活跃的socket才会主动调用callback,通知expoll来处理这个socket。(会将连接的socket注册到epoll中, 相当于socket的花名册, 如果有一个socket活跃了, 会回调一个函数, 通知epoll,赶紧过来处理)

3.内存空间拷贝方式(消息传递方式)不一致

select:内核想将消息传递到用户态,需要将数据从内核态拷贝到用户态,这个过程非常的耗时

poll:同上

epoll:epoll的内核和用户空间共享一块内存,因此内存态数据和用户态数据是共享的

IO多路复用机制:select、poll、epoll的区别

原文:https://www.cnblogs.com/846617819qq/p/10973862.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!