av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

聊聊無鎖編程設(shè)計(jì)

什么是無鎖編程

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

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

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

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

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

參考圖

使用場景

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

缺點(diǎn)

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

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

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

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

參考圖

使用場景

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

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

缺點(diǎn)

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

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

「單線程」

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

例如:

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

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

什么時(shí)候使用單線程?

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

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

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

「優(yōu)點(diǎn)」

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

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

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

「缺點(diǎn)」

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

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

總結(jié)

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

結(jié)語

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


當(dāng)前文章:聊聊無鎖編程設(shè)計(jì)
網(wǎng)站URL:http://uogjgqi.cn/article/dpdijip.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們在微信上24小時(shí)期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流