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