通过本文,你将了解到:
- HDFS中的FSNamesystemLock是什么?
- 读写锁ReentrantReadWriteLock、写锁降级以及ReentrantReadWriteLock源码对写线程饥饿情况做的一点优化。
- 简要了解JDK 8的新读写锁:StampedLock。
一、HDFS中的FSNamesystemLock
了解HDFS的朋友都知道,HDFS中有一把大锁。它是HDFS中令人又爱又恨的一个存在。爱是因为:它实现方式简单,保护整个文件系统在并操作下的正确性。恨是因为:正是由于它实现方式简单,锁的粒度很粗,是限制HDFS性能的一个大石!举个例子:比如removeBlocks和completeFile这两个方法。都需要获取写锁,那这样就得等对方执行完之后释放写锁自己才可以获取写锁执行。在集群规模大起来之后,对文件系统修改的RPC请求多起来之后,这把大锁对HDFS性能的限制可想而知。