javaone_JavaOne 2012:非阻塞数据结构如何工作?
javaone
當(dāng)我查看今天的日程安排時(shí),我感到有些驚訝,并指出我目前計(jì)劃今天參加的所有會(huì)議都在希爾頓舉行。 當(dāng)我意識(shí)到JavaOne演示文稿中大約有一半是在希爾頓酒店中并且似乎按路線大致定位時(shí),這變得有些不足為奇了。Tobias Lindaaker ( 新技術(shù) )的演講“原子數(shù)據(jù)結(jié)構(gòu)如何工作?” 在希爾頓的金門大橋3/4/5會(huì)議室區(qū)域舉行。 Lindaaker自從最初提交摘要以來就更改了演講標(biāo)題 。 摘要的標(biāo)題(以及會(huì)議材料中列出的標(biāo)題)是“原子數(shù)據(jù)結(jié)構(gòu)如何工作?”,但他已將其重命名為“非阻塞數(shù)據(jù)結(jié)構(gòu)如何工作?”。
Lindaaker解釋說,“原子”來自希臘語,意思是“不可分割的”。 他解釋說,“無鎖數(shù)據(jù)結(jié)構(gòu)”是“在對(duì)數(shù)據(jù)結(jié)構(gòu)執(zhí)行操作(讀或?qū)?#xff09;時(shí)不會(huì)阻塞任何線程的數(shù)據(jù)結(jié)構(gòu)”。 他說,一個(gè)人要盡可能避免“ 等待旋轉(zhuǎn) ”。
Lindaaker談到了同步區(qū)域。 他說,這些地區(qū)“通過代碼創(chuàng)建了序列化的路徑”和“保證安全的發(fā)布”。 他將“安全發(fā)布”定義為“退出同步[block]之前編寫的所有內(nèi)容”和“保證在進(jìn)入同步[block]時(shí)可見”。 他的項(xiàng)目符號(hào)之一說,“ 可變字段使您無需序列化即可安全地發(fā)布。” Lindaaker在他的“ volatile字段”幻燈片中更加關(guān)注volatile關(guān)鍵字修飾符。
幻燈片“什么是內(nèi)存障礙?” 提供了內(nèi)存屏障概念的簡(jiǎn)單直觀表示。
Lindaaker在他的幻燈片“原子更新”中指出,訪問原子引用的最簡(jiǎn)單方法是使用java.util.concurrent.atomic 。 AtomicReference <V> 。 Lindakker提供了使用杯墊的物理演示,以說明compareAndSet (如果條件有利地匹配,則設(shè)置一個(gè)值)與getAndSet之間的區(qū)別 。 (設(shè)置新值將返回舊值)。
Lindaaker更喜歡java.util.concurrent.atomic.AtomicReferenceFieldUpdater <T,V>,因?yàn)樗摹皟?nèi)存開銷較低”(“對(duì)象標(biāo)頭較少”)和“更好的內(nèi)存局部性”(“無引用間接”)。
Lindaaker解釋說,基于陣列的隊(duì)列確實(shí)會(huì)阻塞(有時(shí)由于有限的硬件資源而需要限制工作量時(shí)會(huì)有所裨益),而鏈接隊(duì)列不會(huì)阻塞。 Lindaaker使用超市隊(duì)列作為差異的示例。 在基于鏈接的隊(duì)列中,您總是站在隊(duì)列中前面同一客戶的后面。 在基于數(shù)組的隊(duì)列中,您始終保持在同一位置。 有界隊(duì)列“經(jīng)常會(huì)表現(xiàn)更好”,但滿時(shí)將阻塞。
本演講的主題之一是學(xué)習(xí)新想法,然后逐一進(jìn)行進(jìn)一步研究的想法。 Lindaaker建議受眾成員查看JDK的代碼,以查看一些令人印象深刻的代碼示例。
Lindaaker引用LMAX ( 倫敦多資產(chǎn)交易所 ) Disruptor作為“環(huán)形緩沖區(qū)”(“帶有讀標(biāo)記和寫標(biāo)記的陣列”)的示例。 他說,“讀者爭(zhēng)奪閱讀標(biāo)記,作家爭(zhēng)奪書寫標(biāo)記”,并強(qiáng)調(diào)了這樣的結(jié)果,“對(duì)于單一讀者/單一作家,沒有爭(zhēng)執(zhí)。” Disruptor頁面將Disruptor描述為“高性能線程間消息傳遞庫”。
Lindaaker表示java.util.concurrent.ConcurrentHashMap是一個(gè)不錯(cuò)的常規(guī)選擇,但是對(duì)于他的演示文稿中的討論并不十分令人興奮。 他說,通過適當(dāng)?shù)恼{(diào)整,它“可以在當(dāng)前的商用硬件上很好地?cái)U(kuò)展”(少于100個(gè)CPU)。
Neo Technology提供了非關(guān)系的數(shù)據(jù)庫實(shí)現(xiàn)( Neo4j )( 圖形數(shù)據(jù)庫 )。 Lindaaker將Neo Technology基于圖的數(shù)據(jù)庫描述為“將數(shù)據(jù)存儲(chǔ)為節(jié)點(diǎn)以及節(jié)點(diǎn)之間的關(guān)系”。
別忘了分享!
參考: JavaOne 2012:非阻塞數(shù)據(jù)結(jié)構(gòu)如何工作? 由我們的JCG合作伙伴 Dustin Marx在“ 實(shí)際事件啟發(fā)”博客中獲得。
翻譯自: https://www.javacodegeeks.com/2012/10/javaone-2012-how-do-non-blocking-data.html
javaone
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的javaone_JavaOne 2012:非阻塞数据结构如何工作?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么重装系统如何重新做电脑系统
- 下一篇: Java生产力提示:社区的热门选择