操作系统将虚拟地址分成内核空间和用户空间
当一个用户进程在进行文件读写时,会调用操作系统内核空间进行对应操作(因为文件读写这部分需要很高的权限才可以执行),但是用户怎么样获知这个操作的完成?换句话说,内核空间完成后怎么通知用户空间,嘿!这个数据可以取了哦~这里涉及到io多路复用
select 轮询所有的fd_set文件描述符,知道有准备就绪的就开始从内核空间复制数据到用户空间,但是操作系统中的fd_set是有限的,所以select监控的内核进程数量也有限
poll是select的增强版,原来一样但是没有fd_set的限制,所以它监控的内核进程数量更多,但是fd_set多了,导致轮询的效率下降
epoll epoll事先通过epoll_ctl()来注册一 个文件描述符,一旦基于某个文件描述符就绪时,内核会采用类似callback的回调机制,迅速激活这个文件描述符,当进程调用epoll_wait() 时便得到通知
int epoll_create(int size);//创建一个epoll的句柄,size用来告诉内核这个监听的数目一共有多大
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout);