一:共享内存
二:线程与锁模型(解决资源使用问题)
三:java内存模型(JSR133)
四:普通锁(内置锁):synchronized
五:Java高级改进锁:ReentranLock
java线程锁机制目的是发挥cpu单核性能的最优化,使用共享内存进行并发运行的必经途径,但是并不一定是最优的锁机制,甚至已经是最基础的锁机制了,共享内存情况下必须要解决的问题就是共享变量的处理也就是所谓的线程通信;
erlange haskell 这些语言利用虚拟机提供了在并行环境中更加优越的处理机制,即用户级轻线程;大批量的创建用户级轻线程,线程拥有自己内存,各个线程之间并不相关,线程间通信使用消息传递机制,由于本机传送带宽自不必提,天生的并行开发运行机制,最大限度的使用cpu内核资源进行处理;其隔离机制感觉跟Docker有异曲同工之妙;
晚上看博客一段话描述的非常好,很好的解释了为什么有并发的这个基本问题这里引用一下:
处理器和内存的交互
这个要感谢硅工业的发展,导致目前处理器的性能越来越强大。目前市场上基本上都是多核处理器。如何利用多核处理器执行程序的优势,使得程序性能得到极大的提升,是目前来说最重要的。
================摘自:http://www.cnblogs.com/aigongsi/archive/2012/04/26/2470296.html ==================》》
目前所有的运算都是处理器来执行的,我们在大学的时候就学习过一个基本概念 程序 = 数据 + 算法 ,那么处理器负责计算,数据从哪里获取了?
数据可以存放在处理器寄存器里面(目前x86处理都是基于寄存器架构的),处理器缓存里面,内存,磁盘,光驱等。处理器访问这些数据的速度从快到慢依次为:寄存器,处理器缓存,内存,磁盘,光驱。为了加快程序运行速度,数据离处理器越近越好。但是寄存器,处理器缓存都是处理器私有数据,只有内存,磁盘,光驱才是才是所有处理器都可以访问的全局数据(磁盘和光驱我们这里不讨论,只讨论内存)如果程序是多线程的,那么不同的线程可能分配到不同的处理器来执行,这些处理器需要把数据从主内存加载到处理器缓存和寄存器里面才可以执行(这个大学操作系统概念里面有介绍),数据执行完成之后,在把执行结果同步到主内存。如果这些数据是所有线程共享的,那么就会发生同步问题。处理器需要解决何时同步主内存数据,以及处理执行结果何时同步到主内存,因为同一个处理器可能会先把数据放在处理器缓存里面,以便程序后续继续对数据进行操作。所以对于内存数据,由于多处理器的情况,会变的很复杂。
《《 =============摘自:http://www.cnblogs.com/aigongsi/archive/2012/04/26/2470296.html ==================》》