主内存和工作内存

主内存(Main Memory)和工作内存(Working Memory)是为了形象理解缓存和CPU级别缓存而创造出来的一组概念。Java内存模型(JMM)中通过主内存和工作内存来屏蔽具体硬件和操作系统的差别,JMM规定主内存用于存储所有变量,每个线程还有自己的工作内存,线程的工作内存中保存了被该线程使用到的主内存变量的副本拷贝,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读取主内存中的变量。

阅读全文

重新认识synchronized(上)

synchronized在JDK5之前一直被称为重量级锁,是一个较为鸡肋的设计,而在JDK6对synchronized内在机制进行了大量显著的优化,加入了CAS,轻量级锁和偏向锁的功能,性能上已经跟ReentrantLock相差无几,而且synchronized在使用上更加简单,不易出错(避免哲学家就餐问题造成的死锁),因此如果仅仅是为了实现互斥,而不需要使用基于Lock的附加属性(中断、条件等),推荐优先使用synchronized。

阅读全文

事务隔离级别浅析

事务是一个高度抽象的概念。事务要解决的问题是如何使多次操作,对外部看起来是一个整体的操作。理想的事务是一把锁,把一个一个的事务按照队列一样排列,不过这样性能我们无法接受,因此引入了引入了MVCC (Multi-Version Concurrency Control) 的概念,MVCC本质是copy-on-write。事务的本质是什么?事务=锁+MVCC

阅读全文

Basic Paxos算法

Paxos算法是一种分布式系统高容错性的一致性算法,为了解决冗余副本间数据一致性的问题。Paxos本身不是很复杂,只是Lamport描述的过于晦涩。从Paxos论文发表到最终被大家认可经历了十多年的时间,如果作者Lamport能够一开始就换一种表达方式的话,或许Paxos在分布式系统中的应用能够更进一步。

阅读全文