java多线程---cpu历史及一些关键概念

  • 1.cpu与摩尔定律:

摩尔定律是由英特尔(Intel)创始人之一戈登·摩尔(Gordon Moore)提出来的。其内容为:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。换言之,每一美元所能买到的电脑性能,将每隔18-24个月翻一倍以上。这一定律揭示了信息技术进步的速度。这一定律自2004年以来,似乎已经失效,失效的原因是由于硅晶体的特性决定的,人们在制造cpu的工艺上已经达到了物理极限,在频率短期没有提高的情况下,为了来提高cpu的速度,人们在研究如何将多个独立的计算单元整合到单独的cpu里,也就是我们所说的多核cpu。
  • 2.同步和异步

同步和异步通常用来形容一次方法调用。

同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。
异步方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作。而,异步方法通常会在另外一个线程中,“真实”地执行着。整个过程,不会阻碍调用者的工作。
  • 3.并发和并行

并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。(eg:我一边看书,一边敲代码)
单核cpu下的多线程和多进程是并发的,因为一个cpu一次只能执行一条指令,系统通过不断切换多任务来执行。
并行:在同一个时间段内,两个或多个程序执行,有时间上的重叠(宏观上是同时,微观上仍是顺序执行)。(eg:我负责看书,另外一个人负责敲代码)
  • 4.JMM(Java Memory Model,JAVA 内存模型)

JMM主要是为了规定了线程和内存之间的一些关系。根据JMM的设计,系统存在一个主内存(Main Memory),Java中所有变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(Working Memory),工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作都是在工作内存中进行,本地内存是JMM的一个抽象概念,并不真实存在。线程之间无法相互直接访问,变量传递均需要通过主存完成。JMM属于语言级的内存模型,它确保在不同的编译器和不同的处理器平台之上,通过禁止特定类型的编译器重排序和处理器重排序,为程序员提供一致的内存可见性保证。

  • 4.1 从源代码到指令序列的重排序

    执行程序时,为了提高性能,编译器和处理器常常会对指令做重排序。重排序分 3 种类型:

  • 1.编译器优化重排序:编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序

  • 2.指令级并行的重排序:现代处理器采用了指令级并行技术来将多条指令重叠执行。如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序。

  • 3.内存系统的重排序:由于处理器使用缓存和读/写缓冲区,这使得加载和存储操作看上去可能是乱序执行。

    上述的 1 属于编译器重排序,2 和 3 属于处理器重排序。
    对于编译器,JMM 的编译器重排序规则会禁止特定类型的编译器重排序。
    对于处理器重排序,JMM 的处理器重排序规则会要求 Java 编译器在生成指令序列时,插入特定类型的内存屏障指令来禁止特定的处理器重排序。


  • 4.2 指令重排规则:happens-before

    happens-before从JDK5开始,java使用新的JSR-133内存模型。JSR-133提出了happens-before的概念,通过这个概念来阐述操作之间的内存可见性。如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须存在happens-before关系。这里提到的两个操作既可以是在一个线程之内,也可以是在不同线程之间。

  • 程序顺序规则:一个线程内保证语义的串行性。
  • 锁规则:解锁必然发生在随后的加锁前。
  • volatile变量规则:volatile变量的写,先发生于volatile变量的读。
  • 传递性:如果A 先于 B,且B 先于 C,那么A 先于 C。
  • 线程启动规则:Thread对象的start()方法先行发生于此线程的每个一个动作;
  • 线程中断规则:对线程interrupt()方法的调用先行发生于被中断线程的代码检测到中断事件的发生;
  • 线程终结规则:线程中所有的操作都先行发生于线程的终止检测,我们可以通过Thread.join()方法结束、Thread.isAlive()的返回值手段检测到线程已经终止执行;
  • 对象终结规则:一个对象的初始化完成先行发生于他的finalize()方法的开始;
posted @ 2018-05-09 20:24  Ch1nYK  阅读(223)  评论(0编辑  收藏  举报