很多资料都讲poll相较于select而言,突破了文件描述符个数限制,但是我不太明白的是,一个进程能打开的文件描述符是有限制的,系统能打开的文件描述符总个数也是有限制的,为什么就说poll没有文件描述符的限制呢?

解决方案 »

  1.   

    1.进程打开的文件描述符个数(ulimit -n), 系统能打开的文件描述符总个数(/proc/sys/fs/file-max) 都是可以手动设置的.
    2.select支持的最大文件描述个数受宏FD_SETSIZE限制, 这个值默认为1024,所以说 select有文件描述符限制. 
    这个宏是内核定义的, 修改这个宏需要重编内核,超过默认值可能导致select性能低下.
    3.poll改进了select的实现, 没有了文件描述符限制, 最大限制就是系统能打开的文件描述符总个数(/proc/sys/fs/file-max)
    但是其本质和select是相同的, 都是在遍历扫描整个文件描述符集合,当文件描述符太多的时候,自然也就有性能瓶颈, 所以才引入了epoll.
      

  2.   

    用epoll吧