【发布时间】:2011-07-29 10:50:56
【问题描述】:
我最近在一次采访中被问到这个问题,虽然我在前两部分做得很好[我假设]我在第三部分有点挣扎。问题来了:
您有两个 Linux 程序,A 和 B。当单独运行时,A 和 B 在刚刚重新启动的系统上分别需要一分钟才能完成。 [即:新系统:您重新启动它,登录,得到一个 shell 提示符,运行程序。]
如果:
a) 一起跑时,他们需要 2 分钟 b) 一起跑时,他们需要 1 分钟 c) 一起运行时,它们需要 30 秒
我说过 a) 如果它们一起运行的时间正好是两倍,它们不共享互斥并且争夺所有相同的资源,可能不共享任何类型的缓存数据或指令 [因此不共享'从缓存的角度来看不能互相帮助]并且每个程序都需要充分利用所述资源才能完成,这样操作系统就无法并行化它们。
对于 b),我说如果它们可以一起运行得一样快,它们可能会共享一些空间/时间局部性,并且可能有助于以这样的方式进行适当的流水线化,即当程序 A 等待时某事,程序 B 可以在这些阶段之间运行,反之亦然 - 在 1 分钟内有效地运行它们。
对于 c),我有点卡住了。回想起来,我可能应该说,也许程序 A 和 B 都在做一个共同的任务,其中两个同时运行可以比一个单独运行更快地完成所述任务 - 例如垃圾收集器。但我能想到的最好的办法是,也许它们从硬盘上的同一个扇区加载,这有助于它们一起快速运行。
我只是想从这里的一些聪明人那里寻找一些关于我可能错过的事情的意见。该职位是一个平台/系统职位,需要很好地理解硬件/软件和操作系统,即它们之间的交互,这就是为什么[我假设]这个问题被问到的原因。
我还试图想出可以应用于每个部分的示例,以帮助展示我对实际应用中的问题的了解,但当场我做不到。
【问题讨论】:
标签: c++ linux architecture parallel-processing