歸納避免同步鎖的幾種方式
在併發程式設計中, 經常需要對共享資料(物件)新增同步鎖, 但同步鎖會導致程式效能下降。下面總結了一些避免同步鎖的方法:
無狀態
因為物件內部不維護狀態,自然就沒有併發修改問題。如果一個伺服器程式不儲存使用者的狀態,那麼就可以很容易進行橫向擴容。
使用不變物件
當物件狀態發生改變時,重新生成物件。在javascript提供建立不可變物件的介面,但可以使用immutable.js或seamless-immutable建立不可變物件。
通過函式呼叫棧傳遞物件引用
物件都在堆空間分配,並可以被多個執行緒引用。如果物件引用只在函式呼叫棧之間傳遞,則只有當前執行緒能引用該物件
對集合進行分割槽
JDK的java.util.ConcurrentHashMap 就是使用這種思想來實現的。 詳情見 . 此方法不能避免鎖,但可以提高併發量
通過訊息傳遞狀態
物件之間通過訊息互動,物件內部不儲存狀態。典型的例子:Actor模型。
使用單執行緒非同步
單執行緒多工:每個任務的執行不能被打斷。 程式監聽各種事件並提供相應的回撥函式
典型例子:nodejs
相關文章
- 分散式鎖的幾種實現方式分散式
- 分散式鎖的幾種實現方式~分散式
- 追蹤原始碼的方式歸納原始碼
- 淺談非同步呼叫幾種方式非同步
- MySQL鎖使用的基本原則歸納MySql
- Oracle的鎖機制歸納總結Oracle
- 說說Java非同步呼叫的幾種方式Java非同步
- mysql忽略主鍵衝突、避免重複插入的幾種方式MySql
- mysql 忽略主鍵衝突、避免重複插入的幾種方式MySql
- 轉貼:Oracle的鎖機制歸納總結Oracle
- 邦芒面試:面試中應避免以下幾種答題方式面試
- 簡單介紹redis加鎖常用幾種方式Redis
- JS非同步程式設計的幾種方式及區別JS非同步程式設計
- css引入的幾種方式CSS
- COOKIE的幾種操作方式Cookie
- 解析xml的幾種方式XML
- 微軟程式歸納新技術:元程式歸納微軟
- 千萬要避免的五種程式註釋方式
- 幾條Oracle資料庫開發的原則歸納(上)Oracle資料庫
- 幾條Oracle資料庫開發的原則歸納(下)Oracle資料庫
- 程式碼迭代的幾種方式
- react 路由的幾種使用方式React路由
- JavaScript的幾種繼承方式JavaScript繼承
- OAuth的幾種授權方式OAuth
- js建立物件的幾種方式JS物件
- javascript建立物件的幾種方式JavaScript物件
- JavaScript類建立的幾種方式JavaScript
- 前端ajax非同步傳值以及後端接收引數的幾種方式前端非同步後端
- iOS開發中的幾種鎖iOS
- redis加鎖的幾種實現Redis
- Java多執行緒13:讀寫鎖和兩種同步方式的對比Java執行緒
- MySql避免重複插入記錄的幾種方法MySql
- RAC時間同步的兩種方式
- Golang語言排序的幾種方式Golang排序
- Express 提交資料的幾種方式Express
- Spring注入Bean的幾種方式SpringBean
- App相互喚醒的幾種方式APP
- 實現 JavaScript 沙箱的幾種方式JavaScript