Android线程篇(六):CPU内存架构
作者:Android开发者社区
地址:https://www.jianshu.com/p/3d1eb589b48e
声明:本文是 Android开发者社区 原创投稿,转发等请联系原作者授权。
有人会问,为什么要讲CPU的内存架构呢?代码的运行他离不开CUP,理解好CUP内存架构,才能明白Java虚拟机是如何和CUP联合工作的。So,这篇文章给大家粗浅的来讲解一下CPU的内存架构,如有不当之处,还忘各位读者指正……
来一张,现在大多数计算机硬件架构的简图:
现在的计算机,基本都是多个CPU,并且有些CPU还是多核的,因此你的Java程序中,每个CUP执行一个线程,并且俩个或者俩个以上的CPU在同时执行任务,这种情况就是我么所说的:并发。
什么是寄存器,点击访问,百度百科:寄存器
每个CPU都有自己的寄存器,CPU在寄存器上执行操作的速度,远远大于在主内存中。
每个CPU还有自己的高速缓存层,CPU访问缓存层的速度快于访问主存的速度,但比访问内部寄存器的速度还要慢一点。
一个计算机还包含一个主存。所有的CPU都可以访问主存。主存通常比CPU中的缓存大得多。
通常情况下,当CPU需要读取主内存的时候,他会将部分数据读到,CPU缓存中,甚至可以将CPU缓存中的部分数据读到寄存器中,然后在寄存器中操作,操作完成后,需要将数据写入主存中的时候,先将数据刷新至CPU缓存中,然后在某个时间点将数据刷新到主存中。
当CPU需要在缓存层存放一些东西的时候,存放在缓存中的内容通常会被刷新回主存。CPU缓存可以在某一时刻将数据局部写到它的内存中,和在某一时刻局部刷新它的内存。它不会再某一时刻读/写整个缓存。
For example:
int i=i+1
当线程执行这个语句时,会先从主内存中读取i的值,然后复制一份到CPU的高速缓存中,然后CPU执行指令对i进行加1的操作,然后将数据写入高速缓存,最后将最新的i值刷新到主存当重。