select、poll、epoll 都属于I/O 多路复用机制。
IO 多路复用机制 用于内核中监视多个文件描述符,一旦某个描述符准备就绪,
能够通知等待资源的程序进行读写操做。
select、poll、epoll 本质上都是同步I/O,进程需要在读写就绪后,负责进行读写(读写过程处于阻塞状态);
而异步I/O 无需进程自己读写,异步I/O会负责自动将数据从内核拷贝到用户空间中。
区别:
- 轮询对象不同:select、poll需要不断的轮询文字描述符FD, 直到资源准备就绪,中间可能要经历多次休眠和唤醒;
epoll只需要不断轮询就绪链表,期间也可能出现多次休眠唤醒,但是他是通过回调函数,
当fd就绪后将其放入就绪链表中,并唤醒休眠的线程epoll只需要不断轮询就绪链表,
期间也可能出现多次休眠唤醒,但是他是通过回调函数,当fd就绪后将其放入就绪链表中,
并唤醒休眠的进程 - FD就绪通知进程机制:select、poll采用内存拷贝,epoll采用共享内存
转载自:https://blog.csdn.net/maikelsong/article/details/80520279