JavaOne 2012:非阻塞数据结构如何工作?

当我查看今天的日程安排时,我感到有些惊讶,并指出我目前计划今天参加的所有会议都在希尔顿举行。 当我意识到JavaOne演示文稿中大约有一半是在希尔顿酒店中并且似乎按路线大致定位时,这变得有些不足为奇了。

Tobias Lindaaker新技术 )的演讲“原子数据结构如何工作?” 在希尔顿的金门大桥3/4/5会议室区域举行。 Lindaaker自从最初提交摘要以来就更改了演讲标题 。 该摘要的标题(以及会议材料中列出的标题)是“原子数据结构如何工作?”,但他已将其重命名为“非阻塞数据结构如何工作?”。

Lindaaker解释说,“原子”来自希腊语,意思是“不可分割的”。 他解释说,“无锁数据结构”是“在对数据结构执行操作(读或写)时不会阻塞任何线程的数据结构”。 他说,一个人要尽可能避免“ 等待旋转 ”。

Lindaaker谈到了同步区域。 他说,这些地区“通过代码创建了序列化的路径”和“保证安全的发布”。 他将“安全发布”定义为“退出同步[block]之前编写的所有内容”和“保证在进入同步[block]时可见”。 他的项目符号之一说,“ 可变字段使您无需序列化即可安全地发布。” Lindaaker在他的“ volatile字段”幻灯片中更加关注volatile关键字修饰符。

幻灯片“什么是内存障碍?” 提供了内存屏障概念的简单直观表示。

Lindaaker在他的幻灯片“原子更新”中指出,访问原子引用的最简单方法是使用java.util.concurrent.atomicAtomicReference <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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值