与多线程相比,什么时候应该使用 select?

问题描述 投票:0回答:1

我刚刚开始学习为 Linux 服务器编写代码。
用多线程编写了一个简单的服务器后,我不知道什么时候应该使用

select

我的多线程服务器非常简单:

while(true)
{
    client = accept(sock);
    pthread_create(client, processClientFunc);
}

每个客户端都有自己的线程,因此可以与服务器通信。

我怎么听说有三个功能:

select, poll and epoll

Google 告诉我

select
可以监控多个文件描述符。
好吧,我明白了,但我认为多线程可以满足所有需求。另外,我想即使我使用
select
我仍然需要使用多线程。

所以我的问题是:我们什么时候应该使用

select

c linux multithreading server posix-select
1个回答
1
投票

我自己从未使用过 select,因为如果我没记错的话,poll 提供了更好的可扩展性。当我处理大量连接并且尝试最小化所使用的线程数时,我会使用轮询。多线程是昂贵的并且通常是不必要的,除非您有很多连接或者您的连接在计算/阻塞上是昂贵的。使用放置良好的轮询或选择将允许您在一个线程中处理所有这些,甚至接受套接字并处理客户端(至少使用轮询)。

因此,只要您有许多连接,可以便宜地节省多线程开销,请使用 poll/select。

© www.soinside.com 2019 - 2024. All rights reserved.