首页 > 代码库 > 多线程-并发三大定律

多线程-并发三大定律

并发三大定律


Amdahl 定律
–Gene Amdahl 发现在计算机体系架构设计过程中,某个部件的优化对整个架构的优化和改善是有上限的。这个发现后来成为知名的Amdahl 定律。
比如:即使你有10个老婆,也不能一个月把孩子生下来。


Gustafson 定律
–Gustafson假设随着处理器个数的增加,并行与串行的计算总量也是可以增加的。Gustafson定律认为加速系数几乎跟处理器个数成正比,如果现实情况符合Gustafson定律的假设前提的话,那么软件的性能将可以随着处理个数的增加而增加。
比如:当你有10个老婆,就会要生更多的孩子。


Sun-Ni 定律
–充分利用存储空间等计算资源,尽量增大问题规模以产生更好/更精确的解。
比如:你要设法让每个老婆都在干活,别让她们闲着。


---------------------------------------------华丽的分割线-------------------------------------


1. Future是做什么用的?


参考:http://blog.csdn.net/simonchi/article/details/8181571


2. Lock和synchronized的区别是什么?


Synchronized是Lock的一种简化实现,一个Lock可以对应多个Condition,而synchronized把Lock和Condition合并了,一个synchronizedLock只对应一个Condition,可以说Synchronized是Lock的简化版本。
在JDK5,Synchronized要比Lock慢很多,但是在JDK6中,它们的效率差不多。


参考:http://blog.csdn.net/tangkai177/article/details/7451797


3. 并发编程 什么是CAS?(CAS 全称是 Compare and Swap)


可以用CAS在无锁的情况下实现原子操作,但要明确应用场合,非常简单的操作且又不想引入锁可以考虑使用CAS操作,当想要非阻塞地完成某一操作也可以考虑CAS。不推荐在复杂操作中引入CAS,会使程序可读性变差,且难以测试,同时会出现ABA问题。


参考:http://my.oschina.net/lifany/blog/133513
参考:http://blog.csdn.net/aesop_wubo/article/details/7537960




4、Lock-Free算法的三个组成部分是什么?


通常都是三个部分组成:
①循环
②CAS (CompareAndSet)
③回退


---------------------------------------------华丽的分割线-------------------------------------


JDK 1.5之后有了ScheduledExecutorService,不建议你再使用java.util.Timer,因为它无论功能性能都不如ScheduledExecutorService


悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。
乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。[1] 乐观锁不能解决脏读的问题。
参考:http://www.cnblogs.com/guyufei/archive/2011/01/10/1931632.html


相关文档:
http://en.wikipedia.org/wiki/Monitor_(synchronization)

多线程-并发三大定律