作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在并行运行的对象集合上执行相同功能的最有效方法是什么?我知道我可以在一个循环中执行 new Thread(() => MyFunc(myParam)).Start()
,但是有更好的方法吗?这似乎是一种非常丑陋的做法。
最佳答案
[...] is there a better way? This seems like a very ugly way of doing it.
是的,这是一种非常丑陋且低效的方式。每个线程都会消耗大量资源,但您的计算机只能同时执行 N 个线程,其中 N 是您计算机上的 CPU 核心数。因此,您可以在优化线程数量以适应 CPU 核心数量的库之上构建,而不是使用像线程这样的低级原语。
如果你有一组对象,我建议:
LINQ 代码:
var result = source.Select(item => ...).ToList();
并行 LINQ 代码:
var result = source.AsParallel().Select(item => ...).ToList();
对于每个循环:
foreach (var item in source)
Process(item);
每个循环并行:
Parallel.ForEach(
source,
item => Process(item);
);
For循环:
for (var i = 0; i < list.Count; i += 1)
list[i] = Process(list[i]);
并行for循环:
Parallel.For(
0,
list.Count,
i => {
list[i] = Process(list[i]);
}
);
关于c# - 运行任意数量的函数,每个函数都在自己的线程上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30551087/
我是一名优秀的程序员,十分优秀!