【发布时间】:2013-10-28 15:13:08
【问题描述】:
System.Threading.ThreadPool.SetMaxThreads(50, 50);
File.ReadLines().AsParallel().WithDegreeOfParallelism(100).ForAll((s)->{
/*
some code which is waiting external API call
and do not utilize CPU
*/
});
我的系统中的线程数从未超过 CPU 数。 我可以使用 PLINQ 并让每个 CPU 获得多个线程吗?
【问题讨论】:
-
这有什么意义?性能不会提高。
-
@GSerg:如果发生某种阻塞 IO,它可能会起作用。不过不推荐。
-
如果我是你,我会调查 TPL DataFlow。 msdn.microsoft.com/en-us/library/hh228603.aspx。或者,如果您想使用纯 TPL,请查看 Parallel.For 和 Parallel.ForEach
-
@Vladimir 这就是阻塞IO的定义;你开始一个 IO 操作,然后让一个线程坐在那里什么都不做,等待它完成,而不是使用异步,这样你就可以在它完成时做一些事情,而无需线程等待操作。
-
@Vladimir:声明“我没有阻塞 IO”。直接与“每个任务只会向外部慢速 API 发送请求并等待约 3 秒响应”相矛盾。您正在阻塞 IO。约 3 秒。