【问题标题】:More TCPClients per Thread or More Threads每个线程更多 TCPClients 或更多线程
【发布时间】:2015-06-02 18:18:23
【问题描述】:

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

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

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

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

我是否朝着正确的方向前进?我错过了什么或没有考虑什么?

【问题讨论】:

  • 我不认为线程架构会成为瓶颈,而是一般来说网络适配器和 WLAN 的争用。因此,您应该尝试以最小化(徒劳的)争用和重传的方式联系客户端。请特别注意您的 Windows 版本和适配器驱动程序。

标签: c# multithreading threadpool tcpclient


【解决方案1】:

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

感谢await,这样做很容易。

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

【讨论】:

    猜你喜欢
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 2017-01-23
    相关资源
    最近更新 更多