【问题标题】:Best way to process X number of threads at a time in a loop?在循环中一次处理 X 个线程的最佳方法?
【发布时间】:2017-11-03 05:05:30
【问题描述】:

我正在为数百台服务器启动一个远程进程,并希望一次运行大约 3 个线程。所以首先我想排队 3 个线程并让它们每个运行 processData() 函数,然后 forloop 中的其余项目必须等到队列打开才能运行该函数,这样我才能继续处理 3 个线程在任何给定时间并行,直到完成。这样做的最佳方法是什么?

foreach (ServerData serv in servers) { 
  processData(...)
}

【问题讨论】:

标签: c# multithreading parallel-processing


【解决方案1】:

您可以尝试 Parallel.ForEach 功能。它还包含一些选项来自定义同时运行的线程数。如果您不指定任何内容,它将根据可用的内存/CPU 处理能力创建线程。

例子:

Parallel.ForEach(servers, (serv) => { //processData function... });

如果你只想同时运行 3 个线程:

Parallel.ForEach(servers, new ParallelOptions { MaxDegreeOfParallelism = 3 }, (serv) => { //processData function... });

更多关于 Parallel.ForEach 的信息在这里:https://msdn.microsoft.com/en-us/library/dd460720(v=vs.110).aspx

【讨论】:

  • 酷。知道这与线程池相比如何(如果完全相关?)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-19
  • 2010-09-08
  • 2019-04-15
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多