搬运和个人补充:
简单来讲:1.select你每次调用时都要传入你要关注的套接字的描述符,这里需要将一组套接字描述符从用户空间拷贝到内核空间,有较大开销,传入之后操作系统会轮询所有的套接字,如果有套接字已经就绪(读就绪或写就绪)就会返回提示已经有套接字就绪,但不会指出那个套接字已经怎样就绪,轮询过程中一直没有就绪套接字就会等到超时时间到再返回。select和poll大同小异,select会将描述字拷贝到内核中的数组,而poll会将描述字拷贝到内核中的链表,所以select一次传输的描述字有限制,而poll则一般没限制。2.epool不同在于套接字描述符从用户空间拷贝到内核空间只会在调用epool_ctl时发生,之后每次需要查询套接字状态时不再需要传入描述字,内核监控的套接字有事件发生时会将相应的描述符放入就绪表中,在你调用epool_wait时,它会返回就绪的套接字描述符还能告诉你相应套机字的就绪状态(读就绪或写就绪),没有就绪套接字就会等到超时时间到再返回。3.这里有两点提高效率的地方,一是每次查询是否将描述字从用户空间拷贝到内核空间,二是采用轮询还是直接从就绪表中获取套接字状态数据。