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.mzph.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…