世界属于将思考付诸实践的人

公路上的思考——环岛模型和多线程

类归于: 开发随想 — colin @ 6:28 下午 2006年01月22日

今天去公司的路上,车停在了十字路口,红灯时间很长。我所在路线是南北方向,看着东西方向的汽车穿梭而过,突然感觉十字路口的中心就像是一个临界区,东西方向和南北方向是两个都要经过这个临界区的任务,因为是临界区,所以两个方向的车不能同时经过,任何时候都会有一个方向的车在等待,而且有红绿灯来指示,或者说是信号灯,这大概就是操作系统中信号灯定义的由来吧。

但是,从时间片的角度来看,东西方向的汽车今天并不是很密集,每个汽车之间有很长一段距离,即使这样,南北方向的车还是在等待,为什么没有利用这个时间缝隙穿过去呢?我一直都觉得这可是公路,安全第一,不能以操作系统来对比,为了提高效率就不顾交通规则。但是,难道就没有既可以提高效率又保证交通安全的方案了吗?

有!事实上这个方案早就出现了,环岛!

2006122145635715.jpg

在北京好像叫“立交平座”,也叫平面立交,在2003年的时候为了打通市内交通微循环而大片建立。查了一些资料,据说环岛的发明者是英国人,环岛模型是介于普通交通灯和立交桥之间的一种枢纽交通的方案。由衷地敬佩环岛的发明人!

有了环岛,东西方向和南北方向的汽车不必再等待,只要环岛有空隙,汽车就可以进入环岛队列,当到达出口位置的时候,汽车离开环岛。这不就是一个多线程的应用吗?不过这里重点强调的是多线程的轮循机制,而不是异步或者其它的特性。

既然是多线程模型,那么用多线程的特性来考虑一下环岛:

线程安全吗?这个答案很简单,如果不安全的话,环岛的交通事故应该很频繁,而事实上不是这样,环岛的拥挤和事故都很少。环岛是如何实现线程安全的呢?我觉得环岛本身的特殊实现方式赋予了环岛内线程很强的线程同步能力,任何一个在环岛内的汽车都很清楚环岛内其它车辆的行动状态,这应该是环岛和汽车封装的一种底层机制。而在我们的应用中,多线程中内的线程安全必须靠应用层自身来保证,使用多线程,同时也要为多线程的安全付出代价。

再来想想立交桥,也可以说是立体环岛,我觉得更像是建立在多处理器上的多线程,因为不同高度的环岛可以真正实现并行,带来的效率可想而知,但是为什么不把所有的环岛都改为立交呢?我想原因有两点:

1、不是所有的路口都需要立交这么大规模的交通枢纽,很多流量很小的路口被称为交通的微循环,所以一个平面环岛足以应付。在我们的多线程应用中也是如此,如果系统的并发量根本就达不到单处理无法承受的地步,那又何必要多处理器呢,系统的瓶颈可能根本不在这里;

2、成本问题,修一个立交桥比修一个环岛要昂贵得很多,同样,多处理器比单处理器也要昂贵。

Share/Save/Bookmark

服务器部署——星球计划随想

类归于: 开发随想 — colin @ 6:29 下午 2006年01月21日

刚看到csdn上有帖子发牢骚,埋怨网通接入上网比访问火星上的服务器都慢!

不过说真的,不知道何时可以在其它星球部署服务器,但是知道那个时候的带宽一定不小,应该有一条宇宙链路,还有银河协议,很多星球p2p传输文件……那时候的应用真是无法想象,或者说想什么就有什么。就拿QQ说,如果给宇宙提供优质服务,采用就近接入,每个星球的机房都要去部署服务器,如果出故障了,出差去机房,不知道要多久?

那时候的isp服务商有一个覆盖宇宙的网络,被称为移洞,还有一个覆盖不了全部宇宙而且信号比较差的isp,被称为怜通,还有一个星号更差的号称小零通,据说有人使用它的时候从星球上掉了下去……

随想而已……

Share/Save/Bookmark

未来的计算机是怎么产生的?

类归于: 开发随想 — colin @ 8:42 下午 2006年01月15日

1G年以后,物理学家和历史学家都坚信一个事实,那就是在nG年前,在一场被称为“宇宙大爆炸”的灾难后,产生了计算机这个东西。科学家们都不知道计算机是怎么产生的,因为他们都知道计算机早在人类出现之前就已经出现很久了,从记载的史册上已经无法考证了,但是出于对科学的尊敬,还是把这个任务交给了考古学家,考古学家经过长期的研究,最后得出结论,计算机不符合进化论的原理,它是在一场物质碰撞的爆炸中变出来的……

不知道,未来的人类是进步还是退步……

Share/Save/Bookmark

程序员才能看懂的笑话?

类归于: 开发随想 — colin @ 6:31 下午 2006年01月03日

偶尔在一个blog上看到这么一个笑话:有个同事说自己晚上做了一个梦,梦里边又做了一个梦,而且梦里边的那个梦醒来一次:)

这种嵌套的梦估计只有程序员能做得出来,这确实要求做梦的人本身支持嵌套调用机制,也许只有程序员才有这种心理素质,不过人的大脑不知道有没有堆栈这个东西来支持休眠期的嵌套……就算有,但是我觉得人脑的堆栈设计的不是太好,我们很难进行累计记忆,经常是记住了新的忘记了旧的,难道大脑的堆栈缓存太小?

如果梦里Core Dump怎么办? 这个或许是Unix程序员看得懂的笑话

Share/Save/Bookmark