7

是否可以运行我的一些 PLINQ AsParallel() - 优先级低于其他查询的查询?(或者某些优先级高于其他人)PLinq 是否可以做到这一点,还是我必须避免使用 PLINQ 并自己完成所有工作?

编辑/更新:

可以打电话吗

Thread.Sleep(0)

当我想归档较低优先级时,在并行执行的方法中?或者这是一个非常糟糕的做法/黑客?

4

2 回答 2

5

不幸的是,这在 PLINQ 中无法直接实现。

您可以通过创建自定义TaskScheduler在任务并行库的大部分其余部分中执行此操作。Parallel.For这将允许您在使用or时拥有自定义“优先级” ForEach

但是,PLINQ 没有提供自定义 TaskScheduler 的能力,因为 PLINQ 要求 TaskScheduler 提供非常严格的保证,并且担心暴露这一点会很成问题。


编辑/更新:

可以打电话吗

线程.睡眠(0)

这会“降低”优先级,但不幸的是,它有自己的问题,尤其是与 PLINQ 结合使用时。这可能会导致 ThreadPool 中的线程饥饿,因为您将在 ThreadPool 线程上“休眠”。

此外,这还有一个根本问题——PLINQ 是为处理查询而设计的,而不是为处理而设计的。引入逻辑代码来控制流结构确实违反了 PLINQ 背后的理论,并且可能会导致您意想不到的性能影响,尤其是在您使用默认分区时。

于 2011-03-04T18:13:31.873 回答
2

AsParallel是非常高级的 API。如果您想使用PriorityThread对正在发生的事情进行细粒度控制,您应该真正使用s

于 2011-03-04T18:12:31.227 回答