不幸的是,对параллельного编程的理解和многопоточности对其他许多人一样,只有经验才能让我明白。执行某种算法来处理 200 张幻灯片的 PowerPoint 演示文稿,Диспетчер задач - Производительность我看到我的处理器平均加载了 30-35%。
我决定做并行处理。我复制了这个文件两次,以便可以由三个线程完成处理,每个线程都将执行其部分:文件副本中的第一个线程处理 1-50 张幻灯片,第二个线程处理 51-100 张幻灯片,第三个线程处理 101- 200 张幻灯片。
public void ProccessPptx()
{
Task task1 = Task.Run(() =>
{
string presentationPath1 = @"c:\temp200_1.pptx";
// proccess 1-50 slides
});
Task task2 = Task.Run(() =>
{
string presentationPath2 = @"c:\temp200_2.pptx";
// proccess 51-100 slides
});
string presentationPath3 = @"c:\temp200_3.pptx";
// proccess 101-200 slides
task1.Wait();
task2.Wait();
}
性能提升:单线程处理耗时 45 秒,使用上述并行处理耗时 25 秒。处理器负载也增加了:平均保持在 60-70%,也就是说,资源的使用效率更高。
问题
我有以下Диспетчер задач - Производительность图片
我理解正确,无论你如何扭曲它,无论我创建多少线程,都只会并行执行8个线程,如果它们的数量超过8个,那么它们将被多线程执行,即 什么时候处理器会交替地从一个跳到另一个?

尝试制作一个任务来处理每张幻灯片,并在最后等待它们完成。
从文件读取可以从这个方法中取出,同样的事情也可以用于文件任务。不幸的是,从您所展示的内容来看,我无法理解您到底需要做什么,但也许甚至 Async / Await 对您来说更好