歸納避免同步鎖的幾種方式
在併發程式設計中, 經常需要對共享資料(物件)新增同步鎖, 但同步鎖會導致程式效能下降。下面總結了一些避免同步鎖的方法:
無狀態
因為物件內部不維護狀態,自然就沒有併發修改問題。如果一個伺服器程式不儲存使用者的狀態,那麼就可以很容易進行橫向擴容。
使用不變物件
當物件狀態發生改變時,重新生成物件。在javascript提供建立不可變物件的介面,但可以使用immutable.js或seamless-immutable建立不可變物件。
通過函式呼叫棧傳遞物件引用
物件都在堆空間分配,並可以被多個執行緒引用。如果物件引用只在函式呼叫棧之間傳遞,則只有當前執行緒能引用該物件
對集合進行分割槽
JDK的java.util.ConcurrentHashMap 就是使用這種思想來實現的。 詳情見 . 此方法不能避免鎖,但可以提高併發量
通過訊息傳遞狀態
物件之間通過訊息互動,物件內部不儲存狀態。典型的例子:Actor模型。
使用單執行緒非同步
單執行緒多工:每個任務的執行不能被打斷。 程式監聽各種事件並提供相應的回撥函式
典型例子:nodejs
相關文章
- python 非同步的幾種方式Python非同步
- 分散式鎖的幾種實現方式~分散式
- 淺談非同步呼叫幾種方式非同步
- 說說Java非同步呼叫的幾種方式Java非同步
- 追蹤原始碼的方式歸納原始碼
- 簡單介紹redis加鎖常用幾種方式Redis
- JS非同步程式設計的幾種方式及區別JS非同步程式設計
- 你應該知道的幾種Spring boot非同步呼叫方式Spring Boot非同步
- 邦芒面試:面試中應避免以下幾種答題方式面試
- css引入的幾種方式CSS
- Unity反射的幾種方式Unity反射
- 資產納管的三種方式介紹
- 前端ajax非同步傳值以及後端接收引數的幾種方式前端非同步後端
- offline tablespace 的幾種方式 (轉)
- 程式碼迭代的幾種方式
- Spring注入Bean的幾種方式SpringBean
- react 路由的幾種使用方式React路由
- python的幾種輸出方式Python
- python的幾種輸入方式Python
- JavaScript的幾種繼承方式JavaScript繼承
- OAuth的幾種授權方式OAuth
- iOS開發中的幾種鎖iOS
- MySql避免重複插入記錄的幾種方法MySql
- 工具歸納
- App相互喚醒的幾種方式APP
- 陣列去重的幾種方式陣列
- Express 提交資料的幾種方式Express
- python接收郵件的幾種方式Python
- Spring - 獲取ApplicationContext的幾種方式SpringAPPContext
- sqlplus常用的幾種登入方式SQL
- spring註冊bean的幾種方式SpringBean
- Golang語言排序的幾種方式Golang排序
- 檔案上傳的幾種方式
- sql最佳化的幾種方式SQL
- C#解析json的幾種方式C#JSON
- 實現 JavaScript 沙箱的幾種方式JavaScript
- 程式間的幾種通訊方式
- 鎖的使用與死鎖的避免