多处理器和多线程 - 操作系统

Multiprocessors and multithreading - Operating Systems

我正在使用 Galvin 的教科书(第 9 版)浏览操作系统主题。在第 4 章多线程中,我遇到了问题 14,如下所示:

具有两个双核处理器的系统有四个处理器可用于调度。 CPU 密集型应用程序在此系统上是 运行。所有输入都在程序启动时执行,此时必须打开单个文件。同样,所有输出都在程序终止之前执行,此时程序结果必须写入单个文件。在启动和终止之间,程序完全是 CPU - 绑定的。你的任务是通过多线程来提高这个应用程序的性能。该应用程序在使用一对一线程模型(每个用户线程映射到一个内核线程)的系统上运行。

• 您将创建多少个线程来执行输入和输出?解释。 • 您将为应用程序的 CPU 密集部分创建多少个线程?解释一下。

对于第一部分,我认为我们可以创建 4 个线程来获取输入以从文件中读取以及将输出写入文件。这是因为无论是输入还是输出,都没有对正在执行的数据进行更新。

对于第二部分,要对数据进行的操作的性质是未知的,例如,是(1)要打印数据的平均值还是(2)打印平均值的函数第一个和最后一个数据点,然后打印第二个和倒数第二个数据点的平均值,依此类推。

因此,对于第二部分,可以使用一个线程来处理操作。

但我不太确定我在这里给出的答案是否正确。所以,如果你能告诉我正确答案,我将不胜感激。

问题是测试您是否了解有关并行工作以提高速度的一些原则。其中一些原则是:

  • 在通常情况下,无法使用多核加速单个文件的读写。文件的速度 I/O 由文件存储位置和方式的属性决定。向其投入更多线程不会有帮助,因为这些线程只是在等待 I/O 完成。
  • CPU 密集部分使用多少线程完全取决于计算的内容。如果程序正在为电影生成图像,请使用 4 个线程,因为这是完全并行的。如果工作负载完全是串行的,请使用 1 个线程,因为添加更多线程无济于事(根据定义)。

在您的示例中计算平均值几乎是完全并行的,因此您应该使用四个线程,而不是一个。