mic*_*l_j 5 c# multithreading load-balancing
我有一个有趣的练习可以从我的教授那里解决.但我需要一些帮助,所以在假期期间不会变得无聊.
演习是为了
我有一个csv文本文件,包含5个虚拟传感器的约400个测量点.
我认为我必须做的事情:
我是c#中多线程应用程序的新手,但我认为使用threadpool是正确的方法.我目前正在编写一个队列,可能在任务中启动它,因此它不会阻止应用程序.
你会推荐什么?
这里有几个环境依赖项:
我们假设它是 .NET 4.0 或更高版本,并且是一个桌面应用程序。
读取传感器
在 WPF 或 WinForms 应用程序中,我将使用单个BackgroundWorker从传感器读取数据。每秒 500 次读取是微不足道的 - 即使 500,00 次通常也是微不足道的。BackgroundWorker 类型是专门为与桌面应用程序交互而设计的,例如将结果传递给 UI,而无需担心线程交互。
处理计算
然后你需要处理“复杂”的计算。这取决于这些计算的寿命有多长。如果我们假设它们的生命周期很短(比如每个不到 1 秒),那么我认为使用 TaskScheduler和标准ThreadPool就可以了。因此,您为每个计算创建一个任务,然后让 TaskScheduler 负责将任务分配给线程。
TaskScheduler 的工作是通过将轻量级任务排队到更重量级的线程来平衡工作负载,并管理线程池以最好地平衡工作负载与机器上的核心数量。您甚至可以覆盖默认的 TaskScheduler以您想要的任何方式安排任务。
ThreadPool 是需要处理的工作项的 FIFO 队列。在 .NET 4.0 中,ThreadPool 通过使工作队列成为线程安全的ConcurrentQueue集合来提高性能。
测量任务吞吐量和效率
您可以使用PerformanceCounter来测量CPU 和内存的使用情况。这将使您很好地了解内核和内存是否得到有效使用。任务吞吐量可以简单地通过查看任务处理和提供结果的速率来测量。
请注意,我在这里没有包含任何代码,因为我假设您想要为您的教授处理实现细节:-)
| 归档时间: |
|
| 查看次数: |
827 次 |
| 最近记录: |