cpu的执行原理,时间片的切换。
cas为什么在任务执行时间短的情况并且任务量较少情况下比synchronized效率高呢?因为cas一直占着cpu,synchronized每次都要进行cpu的时间片切换。
cpu执行线程,cpu和线程是少对多的关系,所以cpu需要在多个线程中来回切换,每个线程只能被cpu的一个时间片内执行,JVM运行在操作系统上,上下文切换的时候:
1.JVM首先告诉操作系统,我要切换啦
2.操作系统把操作权限切换到内核态空间
3.把本次操作信息存储到该线程的pc寄存器中(运行时数据区共分为5部分1.pc寄存器2.虚拟机栈3.本地方法栈4.堆5.方法区,其中123位线程独有,45位所有线程共享)
4.内核态通知cpu,说可以啦
5.cpu说好的大哥,然后重新创建时间片
6.读取新的线程的pc寄存器中的执行指令继续执行。(pc寄存器是存储执行指令的,每次cpu切换完成后还会从 上次执行到的地方继续执行)
简单画个图 有图有真相