公路上的思考——环岛模型和多线程
今天去公司的路上,车停在了十字路口,红灯时间很长。我所在路线是南北方向,看着东西方向的汽车穿梭而过,突然感觉十字路口的中心就像是一个临界区,东西方向和南北方向是两个都要经过这个临界区的任务,因为是临界区,所以两个方向的车不能同时经过,任何时候都会有一个方向的车在等待,而且有红绿灯来指示,或者说是信号灯,这大概就是操作系统中信号灯定义的由来吧。
但是,从时间片的角度来看,东西方向的汽车今天并不是很密集,每个汽车之间有很长一段距离,即使这样,南北方向的车还是在等待,为什么没有利用这个时间缝隙穿过去呢?我一直都觉得这可是公路,安全第一,不能以操作系统来对比,为了提高效率就不顾交通规则。但是,难道就没有既可以提高效率又保证交通安全的方案了吗?
有!事实上这个方案早就出现了,环岛!

在北京好像叫“立交平座”,也叫平面立交,在2003年的时候为了打通市内交通微循环而大片建立。查了一些资料,据说环岛的发明者是英国人,环岛模型是介于普通交通灯和立交桥之间的一种枢纽交通的方案。由衷地敬佩环岛的发明人!
有了环岛,东西方向和南北方向的汽车不必再等待,只要环岛有空隙,汽车就可以进入环岛队列,当到达出口位置的时候,汽车离开环岛。这不就是一个多线程的应用吗?不过这里重点强调的是多线程的轮循机制,而不是异步或者其它的特性。
既然是多线程模型,那么用多线程的特性来考虑一下环岛:
线程安全吗?这个答案很简单,如果不安全的话,环岛的交通事故应该很频繁,而事实上不是这样,环岛的拥挤和事故都很少。环岛是如何实现线程安全的呢?我觉得环岛本身的特殊实现方式赋予了环岛内线程很强的线程同步能力,任何一个在环岛内的汽车都很清楚环岛内其它车辆的行动状态,这应该是环岛和汽车封装的一种底层机制。而在我们的应用中,多线程中内的线程安全必须靠应用层自身来保证,使用多线程,同时也要为多线程的安全付出代价。
再来想想立交桥,也可以说是立体环岛,我觉得更像是建立在多处理器上的多线程,因为不同高度的环岛可以真正实现并行,带来的效率可想而知,但是为什么不把所有的环岛都改为立交呢?我想原因有两点:
1、不是所有的路口都需要立交这么大规模的交通枢纽,很多流量很小的路口被称为交通的微循环,所以一个平面环岛足以应付。在我们的多线程应用中也是如此,如果系统的并发量根本就达不到单处理无法承受的地步,那又何必要多处理器呢,系统的瓶颈可能根本不在这里;
2、成本问题,修一个立交桥比修一个环岛要昂贵得很多,同样,多处理器比单处理器也要昂贵。
最近评论