两个程序的运行时间分别运行,然后一起运行

End*_*iel 29 c++ architecture linux parallel-processing

我最近在一次采访中被问到这个问题,虽然我在前两部分做得很好[我假设]我在第三部分上做了一些努力.这是问题:

您有两个Linux程序,A和B.当单独运行时,A和B每个都需要一分钟才能完成刚刚重新启动的系统.[即:新系统:重新启动它,登录,获取shell提示符,运行程序.]

如果有以下情况,您可以告诉我有关这些计划

a)一起跑,他们需要2分钟b)一起跑,他们需要1分钟c)一起跑,他们需要30秒

我说过:a)如果他们在一起运行时花费的时间恰好是两倍,他们就不会互相排斥,并且正在争夺所有相同的资源,可能不会共享任何类型的缓存数据或指令[因此没有帮助从缓存的角度来看彼此相对,并且每个程序需要完全利用所述资源来完成,使得OS不能并行化它们.

对于b),我说如果它们能够一起快速运行,它们可能在现金中共享一些空间/时间局部性,并且可以使得它们能够以这样的方式正确地流水线化,即当程序A在等待某些东西时,程序B可以在这些阶段之间运行,反之亦然 - 在1分钟内有效地运行它们.

对于c),我有点卡住了.回想起来,我可能应该说,也许程序A和B都在做一个共同的任务,其中两个同时运行可以比单独运行的任务更快地完成所述任务 - 例如垃圾收集器.但我能想到的最好的结果是它们可能是从硬盘上的同一扇区中加载出来的,这有助于它们一起快速运行.

我只是在寻找一些我可能错过的东西的一些聪明人的意见.这个位置是针对平台/系统的位置,需要很好地理解硬件/软件和操作系统,以及它们之间的相互作用,这就是为什么[我假设]问的问题.

我也试着想一些可以应用于每个部分的例子,以帮助展示我对现实生活应用程序的问题的知识,但当场我很简短.

Jon*_*Jon 20

他们一起花了2分钟完成

在这种情况下,我认为每个程序都完全受CPU限制,并且可以使机器上100%的CPU可用.因此,当程序一起运行时,每个程序都以半速运行.

如果两个程序都能够并且愿意使除CPU之外的其他资源(例如某些I/O设备)饱和,那么这也可能是观察到的行为.但是,由于在实践中,通常 I/O设备的性能不会随着应用于它们的负载而线性降低,如果它们过饱和,我会认为这种情况不太可能,并且首先将CPU作为第一个猜测.

他们一起需要1分钟才能完成

这两个程序不会对相同的资源提出异议,或者系统中有足够的资源来满足两者的需求.因此,他们最终不会互相干扰.

他们一起花了半分钟才完成

程序在相同的输入上运行,并且两者都可以判断所有输入何时用尽,因此如果在一半的运行时单独启动,每个程序最终会完成一半的工作.此外,该系统显然有能力提供这些程序受限制的任何资源的两倍.

由于在这种情况下运行时间随着进程量(完美缩放)线性减小,因此在"2分钟"场景中解释的相同原因似乎更有可能限制程序的资源是CPU.这也符合"常见输入"假设,因为如果有不同的I/O设备提供输入,则输入不太可能来自一个源.

因此,在这种情况下的第一个猜测是每个程序都受CPU限制并写入,使得它最多消耗系统中一半的CPU资源.


cor*_*iKa 13

对于A,他们是竞争互斥资源的计划.

对于B,他们是独立的程序,没有真正的互动.

对于你正在努力奋斗的C来说,似乎他们都有相同的工作可供选择.例如,有一系列任务要做,两个程序都能够完成任务,并且知道已完成的任务.因此,如果它们都在同一时间运行(假设多核机器,但即使那时不一定,重要的是它们没有资源瓶颈),它们可以在一半的时间内完成工作.