我刚刚开始学习为 Linux 服务器编写代码。
用多线程编写了一个简单的服务器后,我不知道什么时候应该使用
select
。我的多线程服务器非常简单:
while(true)
{
client = accept(sock);
pthread_create(client, processClientFunc);
}
每个客户端都有自己的线程,因此可以与服务器通信。
我怎么听说有三个功能:
select, poll and epoll
。Google 告诉我
select
可以监控多个文件描述符。select
我仍然需要使用多线程。
所以我的问题是:我们什么时候应该使用
select
。
我自己从未使用过 select,因为如果我没记错的话,poll 提供了更好的可扩展性。当我处理大量连接并且尝试最小化所使用的线程数时,我会使用轮询。多线程是昂贵的并且通常是不必要的,除非您有很多连接或者您的连接在计算/阻塞上是昂贵的。使用放置良好的轮询或选择将允许您在一个线程中处理所有这些,甚至接受套接字并处理客户端(至少使用轮询)。
因此,只要您有许多连接,可以便宜地节省多线程开销,请使用 poll/select。