【发布时间】:2014-03-07 18:59:15
【问题描述】:
当我们执行一些 CPU 密集型任务时,我们并行执行以减少总执行时间,我们使用并行执行,基本上最佳线程数等于 Environment.ProcessorCount。它并不总是最优的,但在大多数情况下。
好的,但是如果我有密集的 IO 绑定任务,CPU 负载很小。基本上,如果 CPU 没有在任务中密集使用,那么使用 1 个线程会更快,不会产生切换开销。 但现在我意识到许多客户(我谈论服务器软件)有 RAID、条带磁盘……在某些系统配置中,IO 操作可以并行完成。但是我怎样才能找到最好使用并行 IO 的时间以及如何找到我应该使用多少线程?据我所知,IO 是否有像 Environment.ProcessorCount 这样的值?你知道找到适合不同系统配置的最佳 IO 线程数的好方法吗?
我认为应该有某种形式的 IO 自定义任务调度程序,它针对 IO 进行了优化,但我找不到... IOTaskScheduler - 没有针对性能进行优化
【问题讨论】:
-
嗯,I/O 线程的最佳数量是……零(好吧,从技术上讲,它通常是一)。这就是异步 I/O 的用途——基本上,您的 I/O 操作不会消耗任何 CPU,因此为它们创建新线程是没有用的。相反,您使用异步回调,以便您仅在 CPU 上实际有工作要做时才获得一个线程。
await和async从你那里很好地抽象出来。
标签: c# .net multithreading io parallel-processing