0

据说 select() 是不可扩展的,因为它需要遍历一个具有最大文件描述器数 (FD) 大小的数组:复杂度 O(max_num_FD)。据说 poll() 更好,因为它只遍历一个大小为活动 FD() 数量的数组:复杂度 O(活动 FD 数量) 活动 FD 是什么意思?

poll() 是一次具有许多可用数据的大型服务器使用的流行方式吗?通常大型服务器在现实中通常使用哪种套接字方式?

4

1 回答 1

1

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

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

select() 和 poll() 在所有 Unices 上都可用。更好的扩展 O(1) 版本epoll在 Linux 和kqueueBSD 上。不过,便携性较差。但是你可以libkqueue0在 Debian Linux 上安装。

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

于 2013-10-09T21:23:14.427 回答