Java 7与伪共享的新仇旧恨

原文:False Shareing && Java 7 (依然是马丁的博客)  译者:杨帆 校对:方腾飞

在我前一篇有关伪共享的博文中,我提到了可以加入闲置的long字段来填充缓存行来避免伪共享。但是看起来Java 7变得更加智慧了,它淘汰或者是重新排列了无用的字段,这样我们之前的办法在Java 7下就不奏效了,但是伪共享依然会发生。我在不同的平台上实验了一些列不同的方案,并且最终发现下面的代码是最可靠的。(译者注:下面的是最终版本,马丁在大家的帮助下修改了几次代码) Read more

False Sharing && Java 7

原文:http://mechanical-sympathy.blogspot.hk/2011/08/false-sharing-java-7.html (因为被墙移动到墙内)

In my previous post on False Sharing I suggested it can be avoided by padding the cache line with unused longfields.  It seems Java 7 got clever and eliminated or re-ordered the unused fields, thus re-introducing false sharing.  I’ve experimented with a number of techniques on different platforms and found the following code to be the most reliable.

Read more

The j.u.c Synchronizer Framework中文翻译版

原文链接

The java.util.concurrent Synchronizer Framework 中文翻译版

作者:Doug Lea
译者:欧振聪  校对:丁一

  1. 背景介绍
  2. 需求
  3. 设计与实现
  4. 用法
  5. 性能
  6. 总结

摘要

在J2SE 1.5的java.util.concurrent包(下称j.u.c包)中,大部分的同步器(例如锁,屏障等等)都是基于AbstractQueuedSynchronizer类(下称AQS类),这个简单的框架而构建的。这个框架为同步状态的原子性管理、线程的阻塞和解除阻塞以及排队提供了一种通用的机制。这篇论文主要描述了这个框架基本原理、设计、实现、用法以及性能。

The j.u.c Synchronizer Framework翻译(三)使用、性能与总结

原文链接 作者:Doug Lea 译者:欧振聪 校对:丁一

4 用法

AQS类将上述的功能结合到一起,并且作为一种基于“模版方法模式”[6]的基类提供给同步器。子类只需定义状态的检查与更新相关的方法,这些方法控制着acquire和 release操作。然而,将AQS的子类作为同步器ADT并不适合,因为这个类必须提供方法在内部控制acquire和release的规则,这些都不应该被用户所看到。所有java.util.concurrent包中的同步器类都声明了一个私有的继承了AbstractQueuedSynchronizer的内部类,并且把所有同步方法都委托给这个内部类。这样各个同步器类的公开方法就可以使用适合自己的名称。 Read more

Disruptor(无锁并发框架)-发布

原文:http://blog.codeaholics.org/2011/the-disruptor-lock-free-publishing/

译者:罗立树

假如你生活在另外一个星球,我们最近开源了一套高性能的基于消息传递的开源框架。

下面我给大家介绍一下如何将消息通过Ring buffer在无锁的情况下进行处理。

在深入介绍之前,可以先快速阅读一下Trish发表的文章,该文章介绍了ring buffer和其工作原理。

Read more

如何使用Disruptor(二)如何从Ringbuffer读取

作者:Trisha  译者:古圣昌  校对:方腾飞

上一篇文章中我们都了解了什么是Ring Buffer以及它是如何的特别。但遗憾的是,我还没有讲述如何使用DisruptorRing Buffer写数据和从Ring Buffer中读取数据。

Read more

通过Axon和Disruptor处理1M tps

原文地址:http://blog.trifork.nl/2011/07/20/processing-1m-tps-with-axon-framework-and-the-disruptor/

作者:   译者:程晓明

LMAX,一家在英国的金融公司,最近开源了其(新型零售金融交易平台的)核心组件之一:Disruptor。这个组件通过删除必须的锁来降低执行开销,且任然保证正确的处理订单。如果你问我,我会说这是一个优美精巧的工程。我尝试把Disruptor应用到Axon控制总线中,就是想看看它到底有多大的潜力。结果相当惊人。

Read more

CPU Cache Flushing Fallacy

原文地址:http://mechanical-sympathy.blogspot.com/2013/02/cpu-cache-flushing-fallacy.html (因有墙移动到墙内)

作者:Mechanical Sympathy

Even from highly experienced technologists I often hear talk about how certain operations cause a CPU cache to “flush”.  This seems to be illustrating a very common fallacy about how CPU caches work, and how the cache sub-system interacts with the execution cores.  In this article I will attempt to explain the function CPU caches fulfil, and how the cores, which execute our programs of instructions, interact with them.  For a concrete example I will dive into one of the latest Intel x86 server CPUs.  Other CPUs use similar techniques to achieve the same ends. Read more

并发框架Disruptor译文

Martin Fowler在自己网站上写了一篇LMAX架构的文章,在文章中他介绍了LMAX是一种新型零售金融交易平台,它能够以很低的延迟产生大量交易。这个系统是建立在JVM平台上,其核心是一个业务逻辑处理器,它能够在一个线程里每秒处理6百万订单。业务逻辑处理器完全是运行在内存中,使用事件源驱动方式。业务逻辑处理器的核心是Disruptor。

Disruptor它是一个开源的并发框架,并获得2011 Duke’s 程序框架创新奖,能够在无锁的情况下实现网络的Queue并发操作。本文是Disruptor官网中发布的文章的译文(现在被移到了GitHub)。

剖析Disruptor:为什么会这么快

  1. 剖析Disruptor:为什么会这么快?(一)锁的缺点
  2. 剖析Disruptor:为什么会这么快?(二)神奇的缓存行填充
  3. 剖析Disruptor:为什么会这么快?(三)伪共享
  4. 剖析Disruptor:为什么会这么快?(四)揭秘内存屏障

Disruptor如何工作和使用

  1. 如何使用Disruptor(一)Ringbuffer的特别之处
  2. 如何使用Disruptor(二)如何从Ringbuffer读取
  3. 如何使用Disruptor(三)写入Ringbuffer
  4. 解析Disruptor关系组装
  5. Disruptor(无锁并发框架)-发布
  6. LMAX Disruptor——一个高性能、低延迟且简单的框架
  7. Disruptor Wizard已死,Disruptor Wizard永存!
  8. Disruptor 2.0更新摘要
  9. 线程间共享数据不需要竞争

Disruptor的应用

  1. LMAX的架构
  2. 通过Axon和Disruptor处理1M tps

如何使用 Disruptor(三)写入 Ringbuffer

原文地址:http://ifeve.com/dissecting-the-disruptor-writing-to-the-ring-buffer/

作者:Trisha   译者:廖涵  校对:方腾飞

这是 Disruptor 全方位解析(end-to-end view)中缺少的一章。当心,本文非常长。但是为了让你能联系上下文阅读,我还是决定把它们写进一篇博客里。

本文的 重点 是:不要让 Ring 重叠;如何通知消费者;生产者一端的批处理;以及多个生产者如何协同工作。 Read more

在写作中成长

本文是作者原创,原文发表于InfoQ架构师(二月刊)推荐编辑栏目:http://www.infoq.com/cn/minibooks/architect-feb-10-2013

记得第一次向InfoQ投稿已经是1年前的事情了,当时花了几个星期的时间写了一篇文章“深入分析volatile的实现原理”,准备在自己的博客中发表时,在同事金建法的建议下,怀着试一试的心态投向了InfoQ,庆幸的是半小时后得到InfoQ编辑郑柯采纳的回复,高兴之情无以言表。这也是我第一次在专业媒体上发表文章,而后在InfoQ编辑张龙的不断鼓励和支持下,我陆续在InfoQ发表了几篇并发编程相关的文章,于是便形成了“聊聊并发”专栏,在这个专栏的写作过程中,我得到非常多的成长和帮助,在此非常感谢InfoQ的编辑们。接下来我想分享下我的写作历程和我对写作的看法。

通过写作来学习。不知何时便爱上了写作,翻开自己的博客,从06年到现在已经写了164篇博文。为什么会写博客?因为我的学习方法是每个输入都尽量有所输出,无论是读书,看文章,参加技术讲座,还是看电影,我都会或多或少的总结输出出来,输出形式要么是一篇博客,要么是一篇微博,要么是一篇笔记。我总是在想如果这篇文章我看完了,但是我却说不出他讲的是什么,那我岂不是在浪费时间。自己完全掌握的知识应该是自己能表达出来的知识。 Read more

Disruptor Wizard已死,Disruptor Wizard永存!

原文地址:The Disruptor Wizard is Dead, Long Live the Disruptor Wizard! 译者:杨帆 校对:丁一

Disruptor Wizard(上一篇中提到的DSL组件)目前已经正式并入Disruptor的代码树当中。既然.net移植版包含了Wizard风格的语法很久了,并且看起来还挺受欢迎,所以为什么还要让人们非得搞两个jar而不是一个?

我跟随Disruptor在术语命名上的变动做出了相应的更新。以前的Customer(消费者),现在叫EventProcessor(事件处理器)和EventHandler(事件句柄)。这样的命名更好的说明了实际上的情况:消费者事实上可以向事件添加附加值。另外,ProducerBarrier(生产者屏障)被合并到Ring Buffer一起,并且Ring Buffer Entry(条目)被改名为Event(事件)。新的命名更贴切了,因为实际上围绕Disruptor的编程模型大部分时候都是基于事件的。

Read more

Disruptor 2.0更新摘要

原文:Disruptor 2.0 – All Change Please 译者:杨帆

马丁最近发布了Disruptor的2.0版本,从我们开始将其开源以来发生了很多变化,现在是个时候推出一个正式的里程碑了。马丁的博客上涵盖了这次更新的所有内容,这篇文章的目的是尝试把我以前的博文以新框架的架构转述给大家,因为将它们都重写一遍要耗费很多时间。现在我看到手工绘图的缺点了。

Read more

深入理解Java内存模型(四)——volatile

本文属于作者原创,原文发表于InfoQ:http://www.infoq.com/cn/articles/java-memory-model-4

volatile的特性

当我们声明共享变量为volatile后,对这个变量的读/写将会很特别。理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步。下面我们通过具体的示例来说明,请看下面的示例代码:

class VolatileFeaturesExample {
    //使用volatile声明64位的long型变量
    volatile long vl = 0L;

    public void set(long l) {
        vl = l;   //单个volatile变量的写
    }

    public void getAndIncrement () {
        vl++;    //复合(多个)volatile变量的读/写
    }

    public long get() {
        return vl;   //单个volatile变量的读
    }
}

Read more

LMAX Disruptor——一个高性能、低延迟且简单的框架

原文地址:LMAX Disruptor – High Performance, Low Latency and Simple Too 翻译:杨帆 校对:丁一

Disruptor是一个用于在线程间通信的高效低延时的消息组件,它像个增强的队列,并且它是让LMAX Exchange跑的如此之快的一个关键创新。关于什么是Disruptor、为何它很重要以及它的工作原理方面的信息都呈爆炸性增长 —— 这些文章很适合开始学习Disruptor,还可跟着LMAX BLOG深入学习。这里还有一份更详细的白皮书

Read more

return top