ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

select、poll、epoll优缺点

2019-12-10 21:00:09  阅读:250  来源: 互联网

标签:遍历 epoll fd poll 就绪 select


select、poll、epoll都是IO多路复用。 

I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。

 

select的缺点

每次调用select,都需要将进程加入到所有fd的等待队列,每次唤醒都需要从每个队列中移除; 每次都需要将fd集合从用户态传递给内核;进程被唤醒后,程序并不知道哪些fd就绪,还需要再比遍历一次; 

因为遍历开销较大,默认只能监视1024个fd

 

poll

poll 和 select相似,只是fd集合的方式不同,但是解决了select文件描述符的最大上限

 

epoll(eventpoll)

功能分离, 将等待队列和阻塞进程分开。

create-创建结构体(eventpoll),ctl-增删fd, wait-唤醒

新增就绪队列

内核维护一个就绪列表,引用就绪的fd,就能避免一次遍历

 

epoll工作方式:创建eventpoll, 通过ctl增删fd,若fd就绪后,调用回到函数将就绪fd放入就绪列表中,并唤醒在wait中进入睡眠的进程(select 和poll 不断轮询是否有就绪fd) ,wait只需判定列表是否为空,不需要遍历整个fd。 

select 和 poll 每次进行等待状态时,都需要将进程挂载在所有监视fd的等待列表里;fd就绪时再解挂

 

参考:

Epoll原理 https://blog.csdn.net/armlinuxww/article/details/92803381

select、poll、epoll优缺点 https://blog.csdn.net/qq_35433716/article/details/82588619

标签:遍历,epoll,fd,poll,就绪,select
来源: https://www.cnblogs.com/wangsong412/p/12019131.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有