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

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

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

          還有別的好處嗎?

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

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

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

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

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

          很明顯,上述的兩個消耗環島都是沒有的

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


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

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

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

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


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


          ItEye推薦




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


          網站導航:
           
          主站蜘蛛池模板: 新野县| 星座| 文安县| 普兰店市| 晋中市| 皮山县| 南溪县| 古田县| 纳雍县| 同心县| 江华| 鄂托克前旗| 千阳县| 太谷县| 陵川县| 昌吉市| 台中市| 开江县| 恩平市| 明光市| 平山县| 定结县| 鄄城县| 怀来县| 行唐县| 海南省| 邯郸县| 乐至县| 肥乡县| 凭祥市| 太保市| 濮阳市| 日喀则市| 将乐县| 平南县| 城市| 鄂托克前旗| 巴南区| 平武县| 丹寨县| 永善县|