c# - 每个线程更多 TCPClient 或更多线程

标签 c# multithreading threadpool tcpclient

我需要一些关于我们正在开发的项目的指导。当触发时,我的程序需要通过 TCP 联系 1,000 个设备并交换大约 200 字节的信息。所有客户端都是无线专用网络。大多数情况下,程序将处于空闲状态,但随后需要尽快发送这些消息。我想出了两种可能的方法:

方法1 使用线程池建立多个工作线程,并让这些线程处理 1,000 个对话。一个线程处理一个对话直到完成。然后,将调整线程池中的线程数量,以实现资源的最佳利用。

方法2 每个线程将使用多个线程来处理多个对话。例如,一个线程进程将打开 10 个套接字连接来启动对话,然后使用异步方法等待响应。当通信完成时,将联系新设备。

方法 2 看起来更有效,因为操作不必等待服务器设备响应。它还可以节省启动和停止所有这些线程的开销。

我的方向正确吗?我错过了什么或没有考虑到什么?

最佳答案

有一种行之有效的方法来处理这个问题。只需使用异步 IO。根本不需要维护任何线程。异步 IO 在 IO 进行时不使用任何线程。

多亏了await,这一切变得非常简单。

select/poll 模型在 .NET 中已过时。

关于c# - 每个线程更多 TCPClient 或更多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29334254/

相关文章:

c# - 检测计算机何时没有任何列为设备的 COM 串行端口

java - 什么时候在 Java 中选择多个进程而不是线程?

JavaScript 同步 Ajax 请求特性

java - 使用 WaterMarkExecutor 相对于 ThreadPoolExecutor 有什么优势?

python - 如何通过多线程代码python提高Webscraping代码速度

c# - ASP MVC、延迟加载和 JSON 序列化。如何填写其他属性?

c# - 动态创建文本框 MVVM?

c# - Thread.Sleep 的替代方案

c# - #if DEBUG 在 Release 中构建后是否可以执行?

c++:为什么执行回调但不执行回调定义之前的函数?