C++ SoopType()/Tror或处理服务器中多个客户端的替代方案 我试图通过创建一个具有多个客户端的服务器应用程序来学习C++的编程知识。服务器应用程序将在Raspberry Pi/Debian Raspbian上运行。我认为这也是一个很好的机会来学习使用线程(例如POSIX)的低级并发编程。然后我遇到了select函数,它基本上允许在一个线程中使用阻塞函数来处理多个客户端,这很有趣。StackOverflow上的一些人提到线程会导致大量开销,而select似乎是一个不错的选择

C++ SoopType()/Tror或处理服务器中多个客户端的替代方案 我试图通过创建一个具有多个客户端的服务器应用程序来学习C++的编程知识。服务器应用程序将在Raspberry Pi/Debian Raspbian上运行。我认为这也是一个很好的机会来学习使用线程(例如POSIX)的低级并发编程。然后我遇到了select函数,它基本上允许在一个线程中使用阻塞函数来处理多个客户端,这很有趣。StackOverflow上的一些人提到线程会导致大量开销,而select似乎是一个不错的选择,c++,multithreading,sockets,select,posix,C++,Multithreading,Sockets,Select,Posix,实际上,我将连接1-3个客户端,但我希望保持我的应用程序的灵活性。作为一种结构设计,我考虑的是一个主线程不间断地调用一个数据线程来处理数据,一个服务器线程监听传入的连接。因为accept调用是阻塞的,所以后者需要是一个单独的线程。如果客户端连接,那么对于每个客户端,我可能还需要一个单独的线程 最后,工作线程将写入共享内存,客户端线程将从共享内存中读取数据并与客户端通信。有些人反对使用线程,但在我的理解中,如果线程很少被调用,并且存在阻塞函数调用,那么线程是好的。最后一个是select函数,它在循

实际上,我将连接1-3个客户端,但我希望保持我的应用程序的灵活性。作为一种结构设计,我考虑的是一个主线程不间断地调用一个数据线程来处理数据,一个服务器线程监听传入的连接。因为accept调用是阻塞的,所以后者需要是一个单独的线程。如果客户端连接,那么对于每个客户端,我可能还需要一个单独的线程

最后,工作线程将写入共享内存,客户端线程将从共享内存中读取数据并与客户端通信。有些人反对使用线程,但在我的理解中,如果线程很少被调用,并且存在阻塞函数调用,那么线程是好的。最后一个是select函数,它在循环中使用,允许在一个线程中处理多个套接字


我认为至少对于数据处理和服务器接受调用,我需要在开始时启动两个单独的线程。我可以在单个线程或单独的线程中使用select处理所有客户端。正确的方法是什么?是否有更智能的替代方案?

如果需要,您可以在单个线程中完成整个任务,或者可以在每个函数中执行一个线程。。。这是一个基于你所需要的细节的设计决策。关于接受的一个注释。。。如果将套接字设置为非阻塞,则可以在侦听套接字上选择,以了解是否可以接受。我还要补充一点,我不会说线程会导致大量开销。。。当然有一些,但显然,大量数据处理会带来好处。在我看来,这就是底线:线程可以用来简化阻塞API,但在处理繁重的情况下,它们确实会发光。