技术开发 频道

论并发程序控制与天通苑交通阻塞之关系

       [IT168 技术文档]  今天上班,比平时要早20分钟起床(因为怕堵车)。可是等做着751路巴士到天通苑时,不愿看到的情象还是出现了。只见去往立水桥方向道路(并排4 车道)在天通西三区就开始排大队。看着大家都下车步行四站地去立水桥做城铁,马路上人流黑压压一片。虽然我在的公司对准时上班打卡要求不那么严,但如果经常晚到本人也觉得不好意思了。但因为上周刚加完班,这周又要上正常班,感觉比较累所以就放弃了步行到城铁的想法,正当在车上座着无事可做时,一个想法忽然进入脑海。因为很长时间没写随笔了,正好在路上想想写点什么好。而眼前的情况不禁让我浮想连篇,这就是写这篇文章的初衷。

    其实把并发程序开发与道路交通“生拉硬套”在一起的确很憋扭。但也有一些相似之处。下面我就把一些共同点乱谈一通。

    1. 并行4车道 vs 并行四个进程

    2. 马路红绿灯 vs lock锁对象

    3. 车道里的汽车 vs 正在运行的线程

    4. 十字路口东西南北同时阻塞 vs  死锁

    5. 交通警察 vs 解除死锁

    6. 年底要通的城铁  vs 多核(N核)的服务器(集群)

    先说第一个,因为本人做web开发相对时间长一些,所以就拿iis中的web园举例。
    每个web园其实就是一个进程,这一点相信大家都认可吧。那好,当http请求到来时,iis通过进程轮循的方式处理这个请求,并创建相应的线程执行相应的代码并处理相关的资源。这些进程互不影响,即使一个进程crash掉,其它的进程依然可以正常执行自己的逻辑。而进程中的资源也是供的运行在本进程中的线程所共享的。比如说我们在c#中所定义的static类型的变量或函数就是一种资源,我们可以用static 对象去lock代码边界,以控制线程的并发访问。而并行的4条车道,每条车道就是一个进程,在本车道中的车辆(即线程)拥有当前道路的行驶权(资源)。
    特殊情况:同一车道两车共占,这里只有让其中一辆车退后(排队)才能让交通通畅,但总有不自觉的小轿车司机在从旁边的车道一把轮就掰过来抢行(这里可以理解为跨进程访问资源),这里只有两种情况,一是其意图得逞,抢了其它车的行驶权。另一种就是刮上了另一辆车,这下傻了吧。只能停下来等警察叔叔来解决了。同时后面的车也不停的按喇叭,必竟大家都急着上班呀。这时就是一种进程间的阻塞了。

0
相关文章