[DN优化] [锁优化] [HDFS-15150] Introduce read write lock to Datanode

博客介绍了在Hadoop中,为了优化性能,将全局的排它锁(ReentrantLock)替换为读写锁(ReentrantReadWriteLock)。改动包括将datasetLock替换为datasetWriteLock和datasetReadLock,并在代码中相应地使用写锁。虽然目前所有访问都使用写锁,行为与原锁相同,但这作为拆锁的第一步,为后续引入读锁以提高并发读性能铺平道路。改动已通过单元测试,但必须配合后续补丁才能实现性能提升。

分析

背景:DN性能优化的一部分
目标:AutoCloseableLock 改为 ReadWriteLock

知识回顾:假设在程序中定义一个共享的数据结构,它大部分时间提供读服务,而写操作占有的时间很少,但是写操作完成之后的更新需要对后续的读服务可见。在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该允许多个线程能在同时读取共享资源。但是如果有一个线程想去写这些共享资源,就不应该再有其它线程对该资源进行读或写(也就是说:读-读能共存,读-写不能共存,写-写不能共存)。这就需要一个读/写锁来解决这个问题。

ReentrantReadWriteLock的实现里面重要特性:1、公平性:非公平锁(默认):非公平锁的吞吐量要高于公平锁。(公平锁概念:公平锁利用AQS的CLH队列,释放当前保持的锁时,优先为等待时间最长的那个写操作分配写入锁)

代码实现

Hadoop自定义实现了一套支持try-with-resource的锁。如下:

public class AutoCloseableLock implements AutoCloseable {
   
   

  private final Lock lock;
  public AutoCloseableLock() {
   
   
    this(new ReentrantLock());
  }

  
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值