到過北京上地的都會知道,上地城鐵往西走有一個很大的上地環(huán)島,旁邊是中關村發(fā)展大廈,第一次到北京的時候還給了小弟一番挺大的感觸

          經常從環(huán)島這里經過,總會思考一個問題:北京地價這么貴,為什么在這里要建一個這么大的環(huán)島呢?環(huán)島到底有什么作用呢?解決交通擁塞?為行人方便?還是別的原因?

          在百度百科可以搜到:是為了減少交通(和諧)事故的發(fā)生。

          還有別的好處嗎?

          先看看普通的十字路口,要么橫向通車,要么縱向通車,可以這樣去理解,在兩個道路交叉這塊正方形是兩個線程搶占的共享變量

          A在運行時,需要鎖住變量,然后走,B等待,B運行時也一樣

          在并發(fā)里面有一種方法:非阻塞算法
          沒了解過并發(fā)的同學可能不清楚非阻塞算法
          這里寫一個簡單的例子
          AtomicInteger count = new AtomicInteger(0);
          ……
          for(;;)
          {
              int expect = count.get();
              if(!count.compareAndSet(expect,expect+1))
              {
                  continue;
              }
              else
              {
                  return;
              }
          }
          

          這樣就實現了一個原子性的i++動作
          為什么要這樣實現呢?為什么不用鎖?
          簡而言之,是因為線程狀態(tài)切換是要消耗很多資源的,如A鎖住了,B正好也訪問,就需要等待了,然后就有一個線程狀態(tài)的切換,A釋放了,B就可以獲得鎖了,然后又一個線程狀態(tài)的切換,很明顯,為了如此簡單的一個功能去犧牲性能是很虧的

          這個跟環(huán)島又有什么關系呢?
          我們先看看十字路口的通常設計有沒有“線程切換”的消耗
          黃燈亮:紅燈亮,橫向停止通車,縱向現在還是停止的
          紅燈亮:綠燈亮,橫向保持停止,縱向開始通車,汽車加速,然后以平緩通過
          紅燈亮:黃燈亮……
          可以看到,黃燈時間消耗(最后一輛汽車起步到通過路口的時間),汽車加速消耗

          很明顯,上述的兩個消耗環(huán)島都是沒有的

          這是我理解的環(huán)島優(yōu)于普通十字路口的一個優(yōu)勢
          (當然,這個推論和判斷都是很片面的,但從并發(fā)這個角度來看,還是有一定的道理的)


          地鐵的漫想
          現在都在追求速度,動車組,飛機……
          為了響應以后的高速高效的社會,地鐵能不能提速呢?

          地鐵的很大一部分時間消耗其實不在路上,而是在進站,旅客上車,出站這個時間上,但很明顯,地鐵必須要讓人下車的,感覺這是一個無法解決的問題

          在并發(fā)的角度來看,旅客下車這一過程可以看待為一個無法避免的關鍵路徑
          能不能用多線程來解決這個問題呢?
          答案應該是可以的
          首先,需要另一個線程專門負責這個關鍵路徑
          A列車以恒速通行在整個路徑
          B列車負責C站的下車業(yè)務
          在從D站通往C站的過程中,AB車完成旅客的交換業(yè)務(都以恒速運行)
          到了C站,A車呼嘯而過
          B列車在C站停車,旅客下車,然后重新繞到D站準備下一個下車業(yè)務

          這樣,在不加速的情況下,列車的行駛速度起碼提高了1.5倍(每站約3分鐘,每次停車約1分鐘)


          已有 0 人發(fā)表留言,猛擊->>這里<<-參與討論


          ItEye推薦




          只有注冊用戶登錄后才能發(fā)表評論。


          網站導航:
           
          主站蜘蛛池模板: 拉萨市| 昆山市| 东乌| 宁波市| 旅游| 乐陵市| 罗甸县| 滦南县| 芮城县| 大同县| 寿宁县| 淮滨县| 平果县| 株洲县| 东海县| 阿尔山市| 涞水县| 金昌市| 湖南省| 韶关市| 博爱县| 磴口县| 紫阳县| 靖安县| 静宁县| 寻乌县| 镇巴县| 云霄县| 永靖县| 芜湖市| 雅安市| 黎城县| 龙口市| 内江市| 五家渠市| 齐齐哈尔市| 伽师县| 托里县| 卓尼县| 通渭县| 尉氏县|