其实写java的人貌似和CPU没啥关系,最多最多和我们在前面提及到的如何将CPU跑满、如何设置线程数有点关系,但是那个算法只是一个参考,很多场景不同需要采取实际的手段来解决才可以;而且将CPU跑满后我们还会考虑如何让CPU不是那么满,呵呵,人类,就是这么XX,呵呵,好了,本文要说的是其他的一些东西,也许你在java的写代码时几乎不用关注CPU,因为满足业务才是第一重要的事情,如果你要做到框架级别,为框架提供很多共享数据缓存之类的东西,中间必然存在很多数据的征用问题,当然java提供了很多concurrent包的类,你可以用它,但是它内部如何做的,你要明白细节才能用得比较好,否则还不如不用,本文可能不是阐述这些内容作为重点,因为如标题党:我们要说CPU,呵呵。
还是那句话,貌似java和CPU没有多少关系,我们现在来聊聊有啥关系;
1、当遇到共享元素,我们通常第一想法是通过volatile来保证一致性读的操作,也就是绝对的可见性,所谓可见性,就是每次要使用该数据的时候,CPU不会使用任何cache的内容都会从内存中去抓取一次数据,并且这个过程对多CPU仍然有效,也就是相当CPU和内存之间此时是同步的,CPU会像总线发出一个Lock addl 0类似的的汇编指令,+0但相对于什么都不会做;不过一旦该指令完成,后续操作将不再影响这个元素其他线程的访问,也就是他能实现的绝对可见性,但是不能实现一致性操作,也就是说,volatile不能实现的是i++这类操作的一致性(在多