
注意两个点客户端断开fd的值0:stdin;1:stdout;2:stderr;递增回收后复用限制1024个ulimit -n 65536提升到65536个IO多复用复用一个线程去同时检测多路是否有IO事件就绪select通过传入位图内核遍历位图复制位图的方式将有响应的网络IO信息带出全部遍历复制以及限制1024个上限的特点让它只能在只有简单网络IO时使用。主要函数和结构体select()int nready select(maxfd1, rset, NULL, NULL, NULL);结构体,宏函数fd_set rfds, rset; FD_ZERO(rfds); FD_SET(sockfd, rfds); FD_ISSET(sockfd, rset) FD_CLR(i, rfds);pollpoll是对select在代码层面的简化本质还是select主要函数和结构体结构体struct pollfd fds[1024] {0}; fds[sockfd].fd sockfd; fds[sockfd].events POLLIN;pollint nready poll(fds, maxfd1, -1);epoll对比select和poll性能更高效底层存储网络连接用的是红黑树就绪事情存储用的是链表。当有网络IO响应时通过红黑树Olog(N)级别的查找找到后放到就绪队列中比起前者从头到尾的遍历和复制快上不少主要函数和结构体epoll_create(1)int epfd epoll_create(1);struct epoll_event:events;data.fd;struct epoll_event ev; ev.events EPOLLIN; ev.data.fd sockfd;epoll_ctl():epoll_ctl(epfd,EPOLL_CTL_ADD,sockfd,ev);epoll_wait()int nready epoll_wait(epfd,events,1024,-1);文章参考与零声教育的C/Clinux服务期高级架构系统教程学习:链接