在循环中一次处理 X 个线程的最佳方法?

Posted

技术标签:

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

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

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

【问题讨论】:

阅读this 【参考方案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

【讨论】:

酷。知道这与线程池相比如何(如果完全相关?)

以上是关于在循环中一次处理 X 个线程的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中一次计算活动线程

java 多线程死循环怎么动态传参?急!

在服务器应用程序中处理中断信号的最佳方法?

线程、事件循环和大量连接和并发

从分离线程停止主游戏循环的最佳方法

间隔运行 Java 线程