使用C#中的任务并行库为每个处理器运行一个并行任务

Bja*_*rtN 1 .net parallel-processing multithreading task-parallel-library c#-4.0

使用任务并行库时,是否可以确保我当时只为每个处理器运行一个任务?如果没有,在C#中执行此操作的最佳方法是什么?

注意:我不是为了提高性能,而是为了使每个任务的时间更加可靠.有关更多信息,请参阅此问题:使用C#中的任务并行库进行并行操作的时间

svi*_*ick 5

首先,如果你想拥有绝对可靠的时机,那么使用Windows和.Net并不是正确的选择.Windows因为它不是实时操作系统,它可以根据系统中发生的其他事情为您的代码选择不同的时序..Net不是一个好的选择,因为垃圾收集器具有非确定性的时序.

但如果您只是想让时间更可靠,那么您可以做一些事情.

如果你想在自己的处理器上运行每个线程,你可以手动创建Threads然后ProcessThread.ProcessorAffinity为每个线程设置,但获取ProcessThreadfor a Thread并不是那么简单.

如果您只是想确保所有任务立即启动(无论当前正在运行的其他任务ThreadPool),您也应该创建自己Thread的任务.

但是,如果您只想确保每个处理器最多只有一个任务,那么只需设置MaxDegreeOfParallelismEnvironment.ProcessorCount.