use*_*969 0 c# task-parallel-library
我是线程和并行库的新手。我试图了解MaxDegreeOfParallelism以及应将其设置为什么值。
做一些阅读,对我来说可能有点误导。
如果我想在4个线程上运行,我想我可以做
var parOptions=new ParallelOptions();
parOptions.MaxDegreeOfParallelism=4;
Run Code Online (Sandbox Code Playgroud)
但是,在我的情况下,多读一些内容似乎并不意味着可以在4个线程上运行,而是更多地涉及Cores及其使用量。
为简单起见,设置应运行的线程数的正确方法是什么?或者,也许您可以在它可以使用的多个线程上进行设置,但是可以在其使用的核心数量上进行更多设置
我打算在config.eg“ ThreadCount”中设置一个用户可以指定的值。这是其他开发人员将运行的内部应用程序,用于导入内容。
任何澄清吗?谢谢
似乎您不了解调度线程的工作原理,您可能需要阅读一下。简而言之,程序可以创建线程,但是它几乎不能控制线程何时以及在哪个内核上运行,这是操作系统的工作。
因此,当您的程序创建4个线程时,操作系统很有可能(通常很可能)决定在其4个内核上运行这4个线程。但是,如果已经有其他进程在使用CPU,则OS可能会决定例如在单个内核上运行这4个线程。
现在,如果将其设置MaxDegreeOfParallelism为4,则意味着Parallel使用它们的循环ParallelOptions最多可以使用4个线程来运行该循环,但不会更多(尽管允许使用更少的线程)。如果它决定创建4个线程,则这些线程将在最多4个内核上运行,这由操作系统决定。
但是,当您的代码受CPU约束时(即,您不读取文件或使用网络或类似方法),通常最好是不进行设置MaxDegreeOfParallelism,TPL会尝试找到要使用的最佳线程数量。
| 归档时间: |
|
| 查看次数: |
1427 次 |
| 最近记录: |