日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
聊聊無鎖編程設(shè)計

什么是無鎖編程

LOCK-FREE,字面解釋就是不通過鎖來解決多線程、多進(jìn)程之間的數(shù)據(jù)同步和訪問的程序設(shè)計方案。相對來說就是通過數(shù)據(jù)結(jié)構(gòu)和算法來解決數(shù)據(jù)并發(fā)沖突的實現(xiàn)方案。

樂東黎族ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

無鎖編程的實現(xiàn)

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

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

參考圖

使用場景

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

缺點

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

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

「數(shù)據(jù)Hash」

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

參考圖

使用場景

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

(2)請求到指定服務(wù)器進(jìn)行處理。例如:Nginx ipHash轉(zhuǎn)發(fā)策略,Kafka hash分區(qū)保證分區(qū)有序性。

缺點

(1) 擴(kuò)容相對復(fù)雜,需要進(jìn)行數(shù)據(jù)遷移。例如一致性hash算法,Kafka分區(qū)再均衡策略。但是某些場景不一定支持?jǐn)U容。

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

「單線程」

某些場景下單線程的設(shè)計要比多線程更加優(yōu)秀, 單線程下不存在資源競爭、線程切換,當(dāng)然也取決于你當(dāng)前的服務(wù)器配置。

例如:

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

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

什么時候使用單線程?

(1)單核服務(wù)器。

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

無鎖編程的優(yōu)缺點

「優(yōu)點」

不會有優(yōu)先級倒置。

不會出現(xiàn)死鎖、饑餓、餓死等問題。

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

「缺點」

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

不適合所以的場景,非全局最優(yōu)解。

總結(jié)

在設(shè)計程序時, 應(yīng)該考慮程序的使用場景來進(jìn)行最優(yōu)的數(shù)據(jù)結(jié)構(gòu)和算法來進(jìn)行方案設(shè)計。無鎖編程也只是解決某些場景的一種方案,并不一定代表著最優(yōu)解。

結(jié)語

優(yōu)秀的設(shè)計模式結(jié)合優(yōu)秀的數(shù)據(jù)結(jié)構(gòu)相才能帶來優(yōu)秀的代碼。編程人的內(nèi)功心法:數(shù)據(jù)結(jié)構(gòu)+算法。


分享標(biāo)題:聊聊無鎖編程設(shè)計
標(biāo)題網(wǎng)址:http://www.5511xx.com/article/dpdijip.html