select, poll, epoll

2020-10-16  本文已影响0人  再凌

背景 : socket在没有得到IO结果的时候会在系统态阻塞自己, 一个进程监听多个socket, 减少进程切换开销

几种方法:

异步方法等系统准备好并拷贝到用户态之后发信号过来读
同步方法分成阻塞和非阻塞.
非阻塞就是在没有准备好时return -1, 因此需要程序反复查询
阻塞就是直接阻塞, 等待准备好.

同步方法都是在系统准备好就调用, 需要手动拷贝到用户态, 这个时候时阻塞的.

select poll 和epoll都是同步方法, 让程序阻塞在用户态, 自己在系统态.
select和poll是反复查询所有的socket IO接口, 如果有IO好了就叫哪个. select上限1024个, poll使用链表记录, 无上限.

epoll在注册的时候需要注册回调函数, 当SOCKET IO 准备好的时候会被被动触发, epoll就能知道是谁好了, 直接交给对方.

select是POSIX, epoll是Linux专享

这里有我的简单的编程实现

上一篇下一篇

猜你喜欢

热点阅读