我想在F#中使用任务并行库(TPL)来执行许多(>1000)长时间运行的任务。这是我的当前代码:
Parallel.For(1, numberOfSets, fun j ->
//Long running task here
)
当我启动此程序时,似乎.NET会立即启动所有任务,并不断在它们之间反弹。更好的做法是,在移动到下一个任务之前,应该待在当前任务上直到完成。这将最小化上下文切换。
有没有办法向调度程序提供提示?我知道可以提供提示,但是我找不到清晰的例子,或者是调度程序已经很聪明了,只是我的感觉有太多的上下文切换正在发生。感谢您的帮助!
MaxDegreeOfParallelism
设置为System.Environment.ProcessorCount
而不是硬编码数值。但是由于超线程,你可能需要将处理器数量除以2。 - Jack P.