作者归档

你所不知道的有关Java 和Scala中的同步问题

原文:Things You Didn’t Know About Synchronization in Java and Scala   译者: 李杰聪

在实际应用中所有的服务端程序都需要在多线程之间进行某种同步。大多数同步已经有框架完成了,比如我们的web服务器,DB客户端和消息框架。Java和Scala提供了大量的组件用来实现稳定的多线程程序。包括对象池,并发集合,高级锁,执行上下文等。

为了更好的理解这些组件,我们深入了解一下最常用的同步原语——对象所。这个是用synchronized 关键字来实现的,在Java中它是非常流行的多线程原语。这也是其他更复杂模式的基础,比如线程池和连接池,并发集合等。

Synchronized 关键字主要用在以下两个场景:

  1. 作为方法的修饰,此方法在同一个时间只能被一个线程执行。
  2. 把一个代码块声明为临界区,任何时间只有一个线程能访问。

阅读全文

非一致性内存访问的读写锁

原文地址译文地址,译者: 李杰聪,校对:郑旭东

原文作者:

  • Irina Calciu         Brown University        irina@cs.brown.edu
  • Dave Dice          Oracle Labs             dave.dice@oracle.com
  • Yossi Lev           Oracle Labs             yossi.lev@oracle.com
  • Victor Luchangco    Oracle Labs              victor.luchangco@oracle.com
  • Virendra J. Marathe   Oracle Labs             virendra.marathe@oracle.com
  • Nir Shavit           MIT                   shanir@csail.mit.edu

摘要

因为多核和多芯片计算机的快速增长,非一致性内存访问(NUMA)架构在主流计算机系统中的地位越来越重要。为了在这些新系统上获取最好的性能,我们需要重新修改当前程序组成部分的并发算法和同步原语。这篇论文重新设计了很关键的同步原语——读写锁。

据我们所知,本文论述的读写锁是第一个专门为NUMA架构设计的,以及这个读写锁的变种。这些变种考虑了在高并发读的情况下的读和写的公平性以及在同一个NUMA节点上让写批量运行。我们的算法利用群组所技术来处理写者之间的同步,比较适合NUMA架构,同时使用二进制标志来协调读者和写者,利用简化的读者计数器,可以在NUMA上使读者间取得更好的并发性。最经过我们的基准程序测试之后,这些简单的NUMA锁算法竟然比目前比较出色的读-写锁的效率还高出10倍以上。为了了评估在真实环境中我们算法的效率,我们也提供了用基准程序 kccachetest测试的结果。Kccachetest属于Kyoto-Cabinet 发行版,这是一个开源的数据库使用了大量的 pthread 线程库的读写锁。跟最好的锁比,我们的锁也把kccachetest的效率提升了40%。 阅读全文

Java7 java.util.concurrent 并发包计划

原文链接译文链接,译者:DOM,校对:郑旭东

 Java7发布版本的具体计划应该开始了,之前经常有人问我们关于JSR166的后续计划包含哪些内容。下面是目前暂定的内容,欢迎提出你们的见
解和意见。

return top