在循环中一次处理 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 个线程的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章