multithreading - 如何最小化 tcp 服务器应用程序中使用的线程数?

标签 multithreading sockets tcp udp

我正在寻找人们在实现为客户端 TCP(或 UDP)请求提供服务的服务器应用程序时使用的任何策略:设计模式、实现技术、最佳实践等。

为了这个问题的目的,我们假设请求的持续时间相对较长(几分钟)并且流量对时间敏感,因此在响应消息时没有延迟是可以接受的。此外,我们既为来自客户端的请求提供服务,也为我们自己建立与其他服务器的连接。

我的平台是 .NET,但由于无论平台如何,底层技术都是相同的,所以我有兴趣查看任何语言的答案。

最佳答案

现代方法是利用操作系统为您多路复用许多网络套接字,让您的应用程序能够仅处理有流量的事件连接。

无论何时打开一个套接字,它都会与一个选择器相关联。您使用单个线程来轮询该选择器。每当数据到达时,选择器将指示事件的套接字,您将该操作移交给子线程并继续轮询。

这样你只需要一个线程来处理每个并发操作。打开但空闲的套接字不会占用线程。

关于multithreading - 如何最小化 tcp 服务器应用程序中使用的线程数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32198/

相关文章:

java - 线程 2 等待线程 1 完成才能启动 问题? java

java - 在一个AsyncTask实例上多次调用execute()时,线程是否同步运行

python - 让高优先级python线程进入临界区,而低优先级线程在临界区执行

python - 在等待连接时如何关闭服务器套接字?

java - 为什么 DataInputStream.readUTF() 导致主线程永远等待? [套接字编程]

c++ - 加速非阻塞 Unix 套接字 (C++)

c# - 将数据从类传递到表单列表框 |聊天客户端

tomcat - 我可以通过 server.xml 中的配置操作 tomcats 对 request.getServerName() 或 request.getLocalAddr() 的回答吗

tcp - 测量单个 TCP 连接的丢包数

python - 我正在尝试在 python 中运行一个线程,但没有看到输出