最近在多个场合大肆宣扬多核多线程,收到对多线程表示不解的问题N多,苦思多日,终得一形象生动的模型,你肯定懂的。
因为是比喻和科普、过于严谨的技术控请勿吐槽。
处理器性能提高之公开秘笈:超标量、多线程、多核。
用于说明的生活模型:高速公路及收费站。
简单CPU的原型:单车道马路 + 单收费闸口,车辆只能一辆辆排队通过,并行度为1。
为了提高通行能力同时积极创收,相关部门运用世界顶尖CPU设计理念,对高速公路系统进行了如下拓宽改造:
(1) 增加车道(图示为3条车道);
(2) 增加收费通道(图示为2个通道);
(3) 每个收费通道放置多个收费员(图示每条通道有a和b两个收费窗口)。
其中(1)+(3)组合手段就是所谓的超标量结构,该图示为双发射超标量。超标量指有多个车道,双发射是指有a和b两位收费员可以同时发卡,把两辆车送到不同车道上去。
手段(2)就是多线程的模型了,原有车道不变、只增加收费通道,这样多个车流来的时候可以同时发卡放行。
从 这个比喻来看多线程显然是个非常直观和有用的办法,但为什么在CPU世界中似乎有点模糊难懂的感觉呢?那是因为CPU的指令流喜欢一个挨一个、一列纵队龟 速前进,这样的话单通道多收费员还起点作用、多通道就形同虚设了。收费员1.a和1.b会累死,而2.a和2.b则能够睡觉。因此把车流进行整队就很重要 ——这就是并行编程,即要设法把一列纵队排列成多列纵队。
至于多核的概念,那就简单粗暴很多了,直接在这条马路边上进行征地拆迁、新修 一条一模一样的高速公路便是,牛吧。现在大家手机里面的多核,就是并排几条“单收费通道+多车道”的马路,车流稀少、路况不错,不过相关部门表示因为道路 利用率底下、经济效益欠佳、回收投资压力巨大。
无论多核还是多线程,都有一个同样的问题需要解决,就是要把车流整成多列纵队,这样多条马路和多个收费通道的并行度才能发挥作用。