1. 程式人生 > >讀Chrome原始碼剖析

讀Chrome原始碼剖析

chrome就不用給大家介紹了,前幾天讀一位兄臺對他原始碼剖析的文章,自己也就拿來看了些,實在是水平有限,沒有深入進去。

只能說按自己的理解和兄臺的文章,說說自己的感受了,在chrome真正讓我有所感悟的是他的多執行緒的處理,很長一段時間來,自己在寫多執行緒的程式,後來把程式碼的維護工作交給了另外的同事,結果程式經常出現死鎖現象,俺不得不又去看看,並提出了一些注意點,再後來隨著系統通訊量的增加,鎖帶來的弊端開始顯現,隨著資料量規模的上升及應用的增多,程式越來越慢。

chrome帶來的多執行緒程式設計的思路給我了一個思路,可惜的是原來的程式太複雜,但終究有了一個重構的思路。

在兄臺的文章中有這麼一段,摘錄在此與大家共享:

一直在說Chrome在規避鎖的問題,那到底鎖是哪裡不好,犯了何等滔天罪責,落得如此人見人嫌恨不得先殺而後快的境地。《程式碼之美》的第二十四章美麗的併發中,Haskell設計人之一的Simon Peyton Jones總結了一下用鎖的困難之處,我罰抄一遍,如下:

1.鎖少加了,導致兩個執行緒同時修改一個變數;

2.鎖多加了,輕則妨礙併發,重則導致死鎖;

3.鎖加錯了,由於鎖和需要鎖的資料之間的聯絡,只存在於程式設計師的大腦中,這種事情太容易發生了;

4.加鎖的順序錯了,維護鎖的順序是一件困難而又容易出錯的問題;

5.錯誤恢復;

6.忘記喚醒和錯誤的重試;

7. 而最根本的缺陷,是鎖和條件變數不支援模組化的程式設計。比如一個轉賬業務中,A
賬戶扣了100元錢,B賬戶增加了100元,即使這兩個動作單獨用鎖保護維持其正確性,你也不能將兩個操作簡單的串在一起完成一個轉賬操作,你必須讓它們的鎖都暴露出來,重新設計一番。好好的兩個函式,愣是不能組在一起用,這就是鎖的最大悲哀;