在前不久的開發工作中接觸到了併發容器中的cow併發容器,所以這裡就併發容器做乙個簡單的總結。
首先,併發容器按實現原理分為以下幾種:
1.copy-on-write,比如:copyonwritearraylist,copyonwritearrayset
在需要往集合中新增元素時,首先複製乙個新的集合物件,新增操作在新的集合物件上進行。在操作完成後,將原集合物件指向新的集合物件。即新增時複製。
這種方式需要注意對記憶體的占用問題,畢竟每次寫操作都要複製乙份出來,如果原集合太大,那麼占用的記憶體會難以想象。
因為它的特點,所以它一般使用在小容量的多讀少寫的場景。
2.分段鎖,比如:concurrenthashmap
concurrenthashmap使用的分段鎖機制。相對於hashmap,concurrenthashmap中有乙個段的結構segment。每個segment都繼承了reentrantlock(重入鎖),那麼每個段都可以靈活的進行加鎖釋放鎖的操作。這樣就實現了靈活的分段鎖結構,只要修改的資料不再同乙個段上,那麼就可以支援併發的寫操作。
3.cas,即比較和替換,比如:concurrentlinkedqueue
concurrentlinkedqueue屬於一種非阻塞鍊錶,在要插入資料時,會呼叫sun.misc.unsafe中的乙個compareandswapobject方法。其原理是,當需要修改值時,先比較期望值與當前值是否一樣(期望值來自進行修改操作之前取到的值)。這樣如果在進行修改操作之前有其他的執行緒修改了資料,那麼期望值與當前值顯然不同,就放棄本次的修改操作,從而避免了多執行緒的併發衝突。因為其實現過程沒有使用鎖,所以效能在併發不高的時候是優於鎖的。
4.使用鎖去實現,比如:arrayblockingqueue
這是最好理解的一種,比較直接,直接用鎖去解決併發的問題。但是其效能相對以上幾種,只有在高併發的情況才有較好的效能收益。
併發容器涉及到很多的併發相關的知識,隨便拿出乙個類都可以單獨講一下。這裡只是針對併發容器的幾個原理做乙個簡單的介紹。如有錯誤的地方,歡迎提出來。之後有時間再針對其中的一些常用類進行詳細的介紹。
簡述高併發
一 什麼是高併發 高併發 high concurrency 是網際網路分布式系統架構設計中必須考慮的因素之一,它通常是指,通過設計保證系統能夠同時並行處理很多請求。高併發相關常用的一些指標有響應時間 response time 吞吐量 throughput 每秒查詢率qps query per se...
Docker容器(簡述)
什麼是容器 容器時一種輕量級 可移植 自包含的軟體打包技術,使應用程式可以再幾乎任何地方以相同的方式執行 一種虛擬化的方案 作業系統級別的虛擬化 只能執行相同或相似核心的作業系統 依賴於linux核心特性 namespace和cgroup control group 什麼是docker 能將應用程式...
STL vector容器(簡述)
vector和c 內建的array是類似的,不同的時array時靜態的,vector則是動態的,可以根據實際進行自動的配置,而array則是不可在改變的。vector的技術實現主要是其當空間不足時的情況,即擴容和拷貝資料的策略。vector的結構 templateclass vector 當乙個ve...