许多短命线程接近?

时间:2015-10-28 00:31:54

标签: c# multithreading

我有一个应用程序(永远运行Daemon应用程序),它必须管理物理设备(例如RS485设备)和系统内部应用程序之间的通信(请求和响应) - 类似于“通信层”,许多应用程序可以与之通信硬件设备。

Applications_Send_Request - > Communication_Layer_Forwards_To_Devices - > Communication_Layer_Gets_Response - > Application_receives_response。

我向设备发送请求并获得响应的部分可以是异步作业。

我打算创建一个在应用程序接受其他请求的后台执行此操作的线程。

现在,这个线程将是短暂的 - 大约只有几毫秒到几秒钟。

我可能每秒都会收到几百个请求 - 因此应用程序会创建大量短期线程并删除它们 - 永远不断地执行它。

关注: 1 - 创建数千个线程(尽管它们非常短暂)。 2 - 运行时的运行时间非常长 - 永远运行。

如果使用非常严重的线程,上述设计是否正常且安全。

1 个答案:

答案 0 :(得分:2)

使用Windows thread pool进行此操作,通过System.Threading.ThreadPool公开。

Windows上的线程手动上下旋转非常昂贵。即使在空闲时,它们也会占用大量的用户和内核内存,并且维护起来非常重要。

Windows专门提供了线程池API,以解决在不同线程上运行大量独立的短期并行任务的问题,因此程序不需要通过创建自己的系统来使系统过载。有关选择线程池的真正好的讨论可以在这里找到:https://stackoverflow.com/a/230023

如果您只是让操作系统为您管理线程,您的程序将更小,更快,更简单,更易于维护。