JavaOne 2012:非阻塞數據結構如何工作?

當我查看今天的日程安排時,我感到有些驚訝,并指出我目前計劃今天參加的所有會議都在希爾頓舉行。 當我意識到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在Inspired by Actual Events博客中獲得。


翻譯自: https://www.javacodegeeks.com/2012/10/javaone-2012-how-do-non-blocking-data.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371535.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371535.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371535.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c語言箭頭指針的作用,C語言中,結構體成員變量的點和箭頭

C語言中&#xff0c;調用成員變量用點還是用箭頭&#xff0c;取決于當前的ID是指針還是結構體本身。如&#xff1a;typedef struct {float height;float weight;} Person;int main(int argc, char *argv[]) {Person jiushen;Person *lengleng (Person *)malloc(sizeof(Person)…

JavaOne 2012:調查JVM水晶球

我回到了希爾頓的A / B廣場參加星期一的第四屆會議&#xff0c;但首先去了希爾頓的頂層收拾午餐。 我每年都在JavaOne的第一天被提醒&#xff0c;涉及到每個人的第一天的午餐獲取過程令人驚訝地令人沮喪。 我知道我在JavaOne的第一年的經歷使我有些困惑&#xff0c;因為我不確定…

測試遇到的問題

多人合作測試 多人員合作測試&#xff0c;應盡量保證測試平臺統一&#xff0c;處理流程統一&#xff0c;相互之間保持實時溝通。問題的處理進度應保證所負責的所有測試人員第一時間實時更新。 多人測試應做到2人或以上進行交叉測試。 轉載于:https://www.cnblogs.com/liuliu-wo…

Jquery Memo

jQuery選擇器 $( "#id" ) $( ".class" )$( "element" )全選擇器&#xff08;*選擇器&#xff09; * {padding: 0; margin: 0;}//子選擇器 //$(div > p) 選擇所有div元素里面的子元素P//后代選擇器 //$(div p) 選擇所有div元素…

c#語言輸出字符串長度,C#統計字符長度(漢字占2個字符)

在C#編程過程中&#xff0c;通過String類的Length屬性可以獲取對應字符串的長度&#xff0c;但是細心的讀者可能注意到了&#xff0c;String類的Length屬性返回的是字符串中Char對象的個數&#xff0c;也就是說&#xff0c;一個漢字的長度為1&#xff0c;對此&#xff0c;MSDN的…

使用JMSTester對JMS層進行基準測試

對于我去過的大多數客戶端&#xff0c;使用ActiveMQ擴展JMS消息傳遞層是一個優先事項。 有多種方法可以實現這一目標&#xff0c;但毫無疑問&#xff0c;創建基準測試并在實際硬件上分析架構&#xff08;或者正如我的同事Gary Tully所說的“詢問機器”&#xff09;是第一步。 但…

Js引擎解析執行 閱讀筆記

Js引擎解析執行 閱讀筆記 一篇閱讀筆記http://km.oa.com/group/2178/articles/show/145691?kmrefsearch&from_page1&no1 早期:遍歷語法樹 Js引擎最早使用的是遍歷語法樹方式 &#xff08;syntax tree walker&#xff09; 分為兩步 詞法分析語法分析詞法分析 i a b *…

紅外線遙控c語言程序,紅外遙控的C程序

紅外遙控在生產和生活中應用越來越廣泛,不同的紅外遙控芯片有不同的發碼協議,但一般都是由引導碼,系統碼,鍵碼三部分組成.引導碼是告訴接收機準備接收紅外遙控碼.系統碼是識別碼,不同的遙控芯片有不同的誤別碼,以免搞錯.遙控器上不同的按鍵有不同的鍵碼,系統碼和鍵碼都是16位碼…

Retrofit2 完全解析 探索與okhttp之間的關系

轉載請標明出處&#xff1a; http://blog.csdn.net/lmj623565791/article/details/51304204&#xff1b; 本文出自:【張鴻洋的博客】 之前寫了個okhttputils的工具類&#xff0c;然后有很多同學詢問這個工具類和retrofit什么區別&#xff0c;于是上了下官網&#xff0c;發現其底…

不變性真的意味著線程安全嗎?

我經常閱讀有關“如果對象是不可變的&#xff0c;則它是線程安全的”的文章。 實際上&#xff0c;我從未找到過一篇讓我相信不變的意味著線程安全的文章。 即使是Brian Goetz的Java Concurrency in Practice一書中關于不變性的一本書也沒有完全令我滿意。 在這本書中&#xff0…

c語言設計 數組的知識點,C語言程序設計知識點及示例.pdf

C語言程序設計知識點及示例四川大學錦江學院C語言程序設計知識點及示例知識點1&#xff1a;除了復合語句而外&#xff0c;C語言的語句都以分號結束。示例1&#xff1a;C語言的簡單語句 (非復合語句語句)必須以 結束。參考答案&#xff1a;分號知識點2&#xff1a;目標程序和可執…

移動端知識匯總

參見地址: https://github.com/jtyjty99999/mobileTech 轉載于:https://www.cnblogs.com/duanyue/p/7337789.html

在移動端設置overflow:hidden禁止滾動的解決方法

如果你是將overflow:hidden用在了body上那么不管用&#xff0c;因為移動端是基于touch事件。 兩種解決方法&#xff1a; 1、為html和body同時設置height:100%;overflow:hidden; html, body{height:100%;overflow:hidden; }2、使用touchmove $(document).on(touchmove,function …

單元測試線程代碼的5個技巧

這是一些技巧&#xff0c;說明如何進行代碼的邏輯正確性測試&#xff08;與多線程正確性相對&#xff09;。 我發現本質上有兩種帶有線程代碼的刻板印象模式&#xff1a; 面向任務–許多短期運行的同類任務&#xff0c;通常在Java 5執行程序框架內運行&#xff0c; 面向流程–…

jsp2

D:\Software\Tomcat7\work\Catalina\localhost 是緩存目錄&#xff0c;可以刪掉隱藏域&#xff1a;頁面表單中的一個元素&#xff0c;跟文本框一樣&#xff0c;但是用戶看不到1.建立test1--form表單需要它&#xff0c;而不需要用戶看到&#xff0c;用隱藏域<body><%re…

MongoDB MapReduce 的示例。

// JavaScript source code db.runCommand({mapreduce: "page",map: function Map() {emit(this.title, // how to group{ name: this.name } // associated data point (document));},reduce: function Reduce(key, values) {//reduce用來處理group出來是多條數…

c語言長空格的代碼是什么,c語言中表示空格的是什么代碼?

分析如下&#xff1a;不是所有字符都需要轉義的&#xff0c;空格直接就敲空格&#xff0c;或者使用ASCII碼值賦值為32。空格沒有轉義字符。合法轉義字符如下&#xff1a;\a 響鈴(BEL) 、\b 退格(BS)、\f 換頁(FF)、\n 換行(LF)、\r 回車(CR)、\t 水平制表(HT)、\v 垂直制表(VT)…

使用NoSQL實現實體服務–第1部分:概述

在過去的幾周中&#xff0c;我一直在進行一些研發工作&#xff0c;以了解使用NoSQL數據庫實現實體服務 &#xff08;也稱為數據服務&#xff09;的優勢。 實體服務是托馬斯埃爾&#xff08;Thomas Erl&#xff09;的《服務技術》叢書中提出的服務分類。 它用于描述高度不可知和…

IO注意事項

read()方法返回值為什么是int? 因為字節輸入流可以操作任意類型的文件,比如圖片音頻等,這些文件底層都是以二進制形式的存儲的,如果每次讀取都返回byte,有可能在讀到中間的時候遇到111111111,那么這11111111是byte類型的-1,我們的程序是遇到-1就會停止不讀了,后面的數據就讀不…

c語言用星號輸出沙漏,《算法筆記》學習日記——3.3 圖形輸出

3.3 圖形輸出問題 A: 輸出梯形題目描述輸入一個高度h&#xff0c;輸出一個高為h&#xff0c;上底邊為h的梯形。輸入一個整數h(1<h<1000)。輸出h所對應的梯形。樣例輸入web5樣例輸出數組*********************************************思路這一類的題目都比較簡單&#xf…