至于java如何实现,不知道,就像蔽姿旁楼上说的,应该是由CPU根据时间片轮转算法确定的
一条指令和原子 *** 作是两个概念。一条指令执行过程中不可以被中断,cpu只在一条指令执行完毕之后的中断周期查询中断,线程的切换就是由一个定时器实现的,比如定时器每隔200个时钟周期发起一次中断请求,cpu根据中断向量找到对应的中断处理程序,中断处理程序负责上下文切换。
原子 *** 作是通过锁机制来保证。通过加锁,保证执行原子 *** 作的时候,用到的共享内存不会被其它线程更改,也就是即使cpu切换到其它线程,其它线程也不能更改共享变量,只能等持有锁的线程释放锁。原子 *** 作通常是通过锁来保护一段临界区的代码,这段代码包括多条指令,执行的过程中完全可以发生上下文切换。
锁的实现分为乐观锁和悲观锁。乐观锁就是通过一个空的循环 *** 作实现,悲观锁会让闹迟拿不到锁的线程进入阻塞态,让出cpu。所以说对于单核cpu而言,乐观锁就是在浪唤闹费时间,因为只要它不让出cpu,那个拿到锁的线程就不会执行,它就拿不到锁,一直空转。但是多核cpu当中,拿到锁液链李的线程可以在其它的内核当中执行,它空转几圈说不定锁就释放了,就少了一次上下文切换。
想学习这部分知识可以看《计算机组成原理》和《 *** 作系统》。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)