数据库的事务管理与线程并发十分相似,我来比较一下。
线程安全并发需要保证的特点:原子性、可见性、有序性。
数据库事务需要保证的特点(ACID):原子性、一致性、隔离性、持久性。
对于线程并发而言:
原子性
一段代码执行 (例如 pay()) 不被干扰
-
单处理器多线程
- 线程在运行时可能被中断,切换到另一个线程执行
-
多处理器多线程
- 线程根本就是并行执行的
注意,这个原子性是要求不被其他线程所打扰。
但机器自身的突发故障,是不需要保证的。
而数据库事务的原子性,是要保证不被机器的突发故障干扰。