在我的应用程序中,我有许多可以使用Parallel.For
语句计算其任务的类。每个Parallel.For
都使用自己的ParallelOption
来设置最大并行度。
应用程序流程依赖于用户设置,因此存在以下情况:类A(并行计算)调用类B(也可并行计算)或调用类C(不使用任何并行计算)
另一种模式是递归调用,在每个递归级别上进行并行计算。
我的问题:
是否可以设置一个全局线程池,供所有类使用它来进行计算,并且线程的数量是全局控制的?
是否可以将线程池与Parallel.For
结合起来,以便大多数现有代码保持不变?
一个线程池与独立的parallel.for调用相比有多少开销(我知道这一切都取决于,到最后我需要做一些测试,但也许你有一些好的和坏的过期和良好的建议)< / p>
答案 0 :(得分:2)
是否可以设置所有人使用的全局线程池 要进行计算的类,并控制线程的数量 全球申请?
情况已经如此。目前,应用程序线程池由.NET运行时管理。因此,您可以非常确定,所有类(在正在运行的应用程序中)都使用相同的线程池。您可以使用Task
s,静态ThreadPool
类或静态Parallel
类来访问线程池。
是否可以将线程池与Parallel相结合。对于大多数情况而言 现有代码保持不变?
Parallel.For
内部使用Tasks
和TaskScheduler
。因此,将使用相同的线程池。
答案 1 :(得分:0)
MaxDegreeOfParallelism
将使用所有线程池线程,并且针对您的cpu优化了线程池线程的数量。 Parallel.For
仅在您希望不使用给定循环的所有线程池线程时才有用。
只需使用TaskScheduler
,不要过度思考。
稍后,如果您的应用确实需要它,您仍然可以使用自己的线程池创建自己的func_name(&$form, &$form_state)
...但实际上您不太可能需要这样做。