1. 程式人生 > >提高系統併發性的方法總結

提高系統併發性的方法總結

1. 提高單機併發性的方法

1.1. 通過range lock,分片,分割槽的方法來減小鎖衝突:

例如leveldb中的LRUCache。

1.2. 通過CAS原理實現lock free的資料結構:

例如下面給出了一個基於c11的atomic實現的lock free的skip-list。skip-list通常用來做儲存引擎的記憶體索引。

10000個執行緒併發插入資料,通過測試發現lock free的skip-list效能是lock based的skip-list的大約3倍。

skip-list只需要在多個寫執行緒的情況下需要做執行緒同步。如果只有1個寫執行緒,多個讀執行緒,無需做同步,因為讀要麼讀到的是更新前的資料,要麼讀到的是更新後的資料,不會讀到更新過程中的資料。

1.3. 關於鎖的選擇:

對於lock很短的時間就會釋放掉鎖的場景,傾向於選擇spinlock,因為spinlock類似於忙等待,如果lock時間較短,對cpu的消耗小於執行緒的阻塞和喚醒;

對於lock時間較長才會釋放掉鎖的場景,傾向於選擇mutex,因為長時間的忙等待對cpu的消耗會大於執行緒的阻塞和喚醒;

讀寫鎖的開銷大於普通的獨佔鎖;

可以通過c11的atomic_flag配合memory order實現spinlock。