为什么poll()比select()更好?

时间:2013-10-09 21:09:36

标签: sockets

据说select()不可伸缩,因为它需要遍历文件描述符(FD)的最大数量的数组:复杂度O(max_num_FD)。并且据说poll()更好,因为它只覆盖了一个大小为活动FD()数量的数组:复杂度O(活动FD的数量)活动FD意味着什么?

poll()是大型服务器一次使用多种可用数据的常用方法吗?通常大型服务器通常使用哪种套接字方法实际使用?

1 个答案:

答案 0 :(得分:1)

Active FD表示打开的文件描述符。

select()和poll()都用于单线程单进程程序,以允许它们同时处理多个连接。例如,OpenWRT的uhttpd网络服务器就是这样。

所有Unices上都有select()和poll()。 更好的扩展O(1)版本在Linux上为epoll,在BSD上为kqueue。但是不太便携。但是你可以在Debian Linux上安装libkqueue0

许多程序使用其他方法。例如,SSH守护进程sshd为每个连接生成一个子进程。其他人处理线程中的每个连接。