第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為什么帶有填充字段的結(jié)構(gòu)工作得更快

為什么帶有填充字段的結(jié)構(gòu)工作得更快

Go
慕勒3428872 2021-07-01 17:57:28
我剛剛找到了這個(gè)庫(kù),它提供了無(wú)鎖環(huán),它的運(yùn)行速度比通道快:https : //github.com/textnode/gringo(它的運(yùn)行速度非??欤绕涫?GOMAXPROCS > 1 )但有趣的部分是用于管理隊(duì)列狀態(tài)的結(jié)構(gòu):type Gringo struct {    padding1 [8]uint64    lastCommittedIndex uint64    padding2 [8]uint64    nextFreeIndex uint64    padding3 [8]uint64    readerIndex uint64    padding4 [8]uint64    contents [queueSize]Payload    padding5 [8]uint64}如果我刪除“paddingX [8]uint64”字段,它的工作速度會(huì)慢 20%。怎么可能?如果有人解釋為什么這種無(wú)鎖算法比通道快得多,甚至是緩沖的,也很感激?
查看完整描述

2 回答

?
jeck貓

TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊

填充通過(guò)將每個(gè)結(jié)構(gòu)放在自己的緩存行上來(lái)消除錯(cuò)誤共享。如果兩個(gè)變量共享一個(gè)緩存行,如果有對(duì)另一個(gè)變量的干預(yù)寫(xiě)入,則讀取未修改的變量將與讀取修改的變量一樣昂貴。

當(dāng)一個(gè)變量在多個(gè)內(nèi)核上被讀取而不被修改時(shí),緩存行由內(nèi)核共享。這使得讀取非常便宜。在任何內(nèi)核可以寫(xiě)入該緩存行的任何部分之前,它必須使其他內(nèi)核上的緩存行無(wú)效。如果任何內(nèi)核稍后從該緩存行讀取,它將發(fā)現(xiàn)緩存行無(wú)效并且必須返回共享它。當(dāng)一個(gè)變量被頻繁修改而另一個(gè)變量被頻繁讀取時(shí),這會(huì)產(chǎn)生痛苦的額外緩存一致性流量。


查看完整回答
反對(duì) 回復(fù) 2021-07-05
?
繁星淼淼

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊

它運(yùn)行得更快,因?yàn)樗恍枰i。是 Java 中的一個(gè)實(shí)現(xiàn)(稱為 Disruptor),效果非常好,似乎是 gringo 的靈感來(lái)源。他們解釋鎖的成本,以及如何可以增加吞吐量這里。

至于padding,論文也暗示了一些原因?;旧希禾幚砥骶彺妗?a >這篇論文很好地解釋了它。通過(guò)讓處理器訪問(wèn)其 1 級(jí)緩存而不是盡可能頻繁地訪問(wèn)內(nèi)存或其外部緩存,您可以獲得巨大的性能提升。但這需要采取額外的預(yù)防措施,因?yàn)樘幚砥鲗⑼耆虞d其緩存,并在每次需要時(shí)重新加載(從內(nèi)存或 2-3 級(jí)緩存)。在并發(fā)數(shù)據(jù)結(jié)構(gòu)的情況下,正如@David Schwartz 所說(shuō),錯(cuò)誤共享將迫使處理器更頻繁地重新加載其緩存,因?yàn)橐恍?shù)據(jù)可能會(huì)加載到內(nèi)存行的其余部分中,被修改,并強(qiáng)制整個(gè)緩存再次加載。


查看完整回答
反對(duì) 回復(fù) 2021-07-05
  • 2 回答
  • 0 關(guān)注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)