成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊聊無鎖編程設計

開發 前端
LOCK-FREE,字面解釋就是不通過鎖來解決多線程、多進程之間的數據同步和訪問的程序設計方案。

本文轉載自微信公眾號「Code視角」,作者Code視角。轉載本文請聯系Code視角公眾號。

什么是無鎖編程

LOCK-FREE,字面解釋就是不通過鎖來解決多線程、多進程之間的數據同步和訪問的程序設計方案。相對來說就是通過數據結構和算法來解決數據并發沖突的實現方案。

無鎖編程的實現

「比較并交換 Compare-and-swap」

compare and swap,解決多線程并行情況下使用鎖造成性能損耗的一種機制,CAS操作包含三個操作數——內存位置(V)、預期原值(A)和新值(B)。如果內存位置的值與預期原值相匹配,那么處理器會自動將該位置值更新為新值。否則,處理器不做任何操作。無論哪種情況,它都會在CAS指令之前返回該位置的值。CAS有效地說明了“我認為位置V應該包含值A;如果包含該值,則將B放到這個位置;否則,不要更改該位置,只告訴我這個位置現在的值即可。(百度百科)

參考圖

使用場景

(1) 樂觀鎖的實現方案:不加鎖,假設沒有沖突去完成某項操作,如果因為沖突失敗就重試,直到成功為止。

缺點

(1)循環開銷問題。長時間更改不成功,會來帶大量的CPU消耗。解決方法:需要在修改失敗后執行其它邏輯, 且CAS并不適合資源大量競爭的情況。

(2)ABA問題:線程1準備用CAS將變量的值由A替換為B,在此之前,線程2將變量的值由A替換為C,又由C替換為A,然后線程1執行CAS時發現變量的值仍然為A,所以CAS成功。但實際上這時的現場已經和最初不同了。

「數據Hash」

數據Hash其實就是通過Hash算法把數據提前來確定由哪個節點進行處理或者存儲,解決數據并發的思想是通過算法解決不同的數據到不同的節點。算法:數據.hashCode() % 節點數量。

參考圖

使用場景

(1)定時任務處理數據時。例如:一個定時任務數據量較多,需要集群處理。那么就可以同時啟動任務讀取數據,然后根據idHash來決定當前節點是否要處理這條數據。

(2)請求到指定服務器進行處理。例如:Nginx ipHash轉發策略,Kafka hash分區保證分區有序性。

缺點

(1) 擴容相對復雜,需要進行數據遷移。例如一致性hash算法,Kafka分區再均衡策略。但是某些場景不一定支持擴容。

(2) hash算法是否散列,如果算法不夠散列會出現數據傾斜問題。

「單線程」

某些場景下單線程的設計要比多線程更加優秀, 單線程下不存在資源競爭、線程切換,當然也取決于你當前的服務器配置。

例如:

(1)Redis的設計上,由于內存級別的K/V數據庫,在處理核心讀寫時如果頻繁的CPU切換、線程等待喚醒和鎖資源獲取,反倒會造成性能瓶頸。

(2)在生成分布式id的場景下, 某臺id服務器批量生成id 這個時候也可以進行單線程處理,內存計算非常高效。

什么時候使用單線程?

(1)單核服務器。

(2)業務場景大量CPU計算且數據沖突較多的情況下(非絕對)。

無鎖編程的優缺點

「優點」

不會有優先級倒置。

不會出現死鎖、饑餓、餓死等問題。

減少資源競爭,CPU資源消耗少,更高效。

「缺點」

具有一定的復雜性,需要一定的算法思想。

不適合所以的場景,非全局最優解。

總結

在設計程序時, 應該考慮程序的使用場景來進行最優的數據結構和算法來進行方案設計。無鎖編程也只是解決某些場景的一種方案,并不一定代表著最優解。

結語

優秀的設計模式結合優秀的數據結構相才能帶來優秀的代碼。編程人的內功心法:數據結構+算法。


責任編輯:武曉燕 來源: Code視角
相關推薦

2021-07-26 07:47:37

無鎖編程CPU

2024-05-17 09:33:22

樂觀鎖CASversion

2013-12-18 15:27:21

編程無鎖

2023-03-10 15:45:03

Golang公平鎖

2025-04-28 02:22:00

2023-05-09 08:28:44

Go語言并發編程

2021-08-10 19:15:17

語言編程應用

2019-11-28 16:00:06

重入鎖讀寫鎖樂觀鎖

2023-04-02 17:53:10

多線程編程自測

2021-06-02 09:01:19

JavaScript 前端異步編程

2022-08-05 08:27:05

分布式系統線程并發

2023-01-11 09:56:41

索引SQL

2020-02-24 21:43:36

avaJVM 級鎖線程安全

2023-07-03 09:59:00

并發編程并發容器

2022-12-11 20:09:50

網絡編程通信

2024-10-06 12:56:36

Golang策略設計模式

2023-11-03 13:50:03

智駕方案

2022-08-02 20:21:42

開源項目工具

2019-10-30 09:56:56

內存屏障變量

2022-04-08 08:27:08

分布式鎖系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日日干干夜夜 | 欧美日韩国产高清视频 | 国产免费观看久久黄av片涩av | 欧美日日| 欧美激情在线精品一区二区三区 | 免费99视频 | 一级毛片视频免费观看 | 波多野结衣亚洲 | 午夜激情视频在线 | 久久9热 | 国产欧美精品一区二区色综合 | 日韩资源 | 中文字幕在线一 | 一本色道精品久久一区二区三区 | 久久精品综合 | 午夜羞羞 | 国产91 在线播放 | 日本久久久久久久久 | 亚洲人va欧美va人人爽 | 亚洲欧美中文日韩在线 | 午夜影院在线观看版 | 不卡在线视频 | 色888www视频在线观看 | 欧美日韩久久精品 | 中文在线播放 | 成人精品在线视频 | 精品国产久 | 精品国产乱码久久久久久闺蜜 | 亚洲色图综合 | 浴室洗澡偷拍一区二区 | 男女深夜网站 | 九九爱这里只有精品 | 男女网站免费 | 国产一级视屏 | 91看片免费版 | 99久久精品国产一区二区三区 | 午夜羞羞| 91在线视频免费观看 | 久久精品视频在线播放 | 亚洲精品一区中文字幕乱码 | 91精品国产综合久久婷婷香蕉 |