如果我只有一个单核处理器,我还有必要用并发机制么?
最近在看加州大学某学院的课程,教师在普及并发知识的时候谈到了这个单核处理器是否有必要做并发的问题。答案是是的,即使只有单核处理器和不用并行处理的情况下,并发依然可以极大地改善程序运行性能。原因就是并发可以隐藏延迟。
Hiding Latency
(这个术语我不太清楚怎么翻译比较好,或许我们可以称为隐藏延迟。)
这时候需要介绍下背景。有时候任务需要周期性地等待某些会造成计算延迟的事件的发生和完成。
一个例子是存储读取事件。在我们的机器中的CPU,这个处理器可以运行得很快。但是它必须要和其它的组件进行通信,组件有可能是在同一块主板的其它芯片,也可能是存储单元。你可能甚至还想读取一个远程的存储单元。这意味着你可能需要通过以太网或者WiFI进行网络通信,这就让事件的等待时间变得更长了。这就造成CPU虽然执行速度快,但计算资源可能浪费在了等待上。
另一个可以举的简单例子是:
计算X=Y+Z。这个大任务,可以分解成几个小任务,首先是把Y和Z从存储单元中读取出来,然后你才可以计算的Y+Z的和X,再然后,你要把这个计算结果写入到存储单元中。求和发出的add指令执行时间可能就仅仅只需要1个时钟周期, 但是单是内存访问读取Y和Z的操作,就可以花费超过100个时钟周期的时间。
所以现在大家或许可以发现问题了,我们可能会发出疑问,是否可以让处理器在一项任务的等待时期去执行一些更有意义的代码?比如当任务1在等待的时候,处理器去执行任务2,任务2在等待的时候,处理器就去执行任务3。在这个过程中的hiding latency,这个latency也可以被指为wait time latency。
所以回到我们最初的问题,并发在单核处理器的情况下依然可以极大地提升程序执行表现。