我最近在面试中被问到了这个问题,对于前两部分我做得还不错,但是对于第三部分有些困难。以下是问题:
你有两个Linux程序A和B。当单独运行A和B时,在刚重启的系统上每个程序都需要一分钟才能完成。(例如:新系统:重新启动它,登录,获取shell提示符,运行程序)
如果:
a) 当它们同时运行时,需要2分钟 b) 当它们同时运行时,需要1分钟 c) 当它们同时运行时,需要30秒
针对a),如果它们同时运行时需要完全的两倍时间,那么可以推断出它们没有共享任何互斥资源,可能不共享任何高速缓存数据或指令(因此从缓存角度来看对彼此没有帮助),每个程序需要利用全部资源来完成任务,以致操作系统无法并行处理。
针对b),如果它们能够一起快速运行,那么它们可能共享某些空间或时间局部性,并且可能适合以正确的流水线方式操作,即当程序A等待某些操作时,程序B可以在这些阶段之间运行,反之亦然 - 有效地在1分钟内运行它们两个。
针对c),我有些困惑。回顾起来,我可能应该说,程序A和B都在执行共同的任务,两个程序同时运行可以比单独运行更快地完成该任务 - 例如垃圾收集器。但是我能想到的最好答案是:它们也许从硬盘上的相同扇区加载,这帮助它们一起快速运行。
我只是想听听这里一些聪明人提供的意见,该职位需要对硬件/软件和操作系统有很好的理解,以及它们之间的交互,这就是为什么(我认为)这个问题被问到的原因。
我也试图想出一些例子,以便应用到每个部分上,来展示我对问题实际应用的知识,但是当场我无法想出。