首页 > 其他 > 详细

知识点整理

时间:2014-07-21 08:08:31      阅读:314      评论:0      收藏:0      [点我收藏+]

 

关于超线程

CPU的超线程简单来讲,就是当一个线程cache miss需要执行访存操作时,访存期间CPU会等待,此时切换到另一个线程执行,避免浪费CPU资源。访存比较慢,超线程的切换设计的很快,号称只要一个CPU周期。

超线程为什么那么快切换,普通线程切换慢因为多个线程使用的东西是一个,比如寄存器,当普通线程切换时,必须将一个线程的值切换成另一个线程的值。而超线程很多东西是独立的(对于软件能看到的东西,对于每一个超线程都是独立的,对于软件看不到的,比如缓存(纯硬件的事情,软件是无法控制的),是否设计的独立,只有CPU设计人知道。),因此超线程切换很快,直接使用另一个超线程的就可以了,不需要寄存器内部数据的切换。

C语言关键字volatile 

编译器编译代码时会进行优化,根据代码上下文判断,某个变量的值没有变,下次使用就会直接使用寄存器里面的值,而不会访存。

但如果两个进程共享一个内存,A进程改,B进程读,B进程,有可能一直读不到正确的数据,因为他一直使用寄存器里面的值。

此时就需要写代码时,加上volatile关键字,告诉编译器不要优化,直接访存而不是拿寄存器的值。

但访存不一定是真的访问内存,有可能直接从缓存中取值,缓存是软件控制不了的(代码无法指定在内存读还是在缓存读),是硬件控制的。

不要以为加上volatile就会强制从内存里面读,他只是告诉编译器不要优化成读寄存器,而是访存,但访存是访内存还是访缓存,就是运行时硬件的事了。

知识点整理,布布扣,bubuko.com

知识点整理

原文:http://www.cnblogs.com/jintianfree/p/3857506.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!