知識點整理

來源:互聯網
上載者:User

標籤:使用   資料   代碼   c   設計   c語言   

 

關於超執行緒

CPU的超執行緒簡單來講,就是當一個線程cache miss需要執行訪存操作時,訪存期間CPU會等待,此時切換到另一個線程執行,避免浪費CPU資源。訪存比較慢,超執行緒的切換設計的很快,號稱只要一個CPU周期。

超執行緒為什麼那麼快切換,普通線程切換慢因為多個線程使用的東西是一個,比如寄存器,當普通線程切換時,必須將一個線程的值切換成另一個線程的值。而超執行緒很多東西是獨立的(對於軟體能看到的東西,對於每一個超執行緒都是獨立的,對於軟體看不到的,比如緩衝(純硬體的事情,軟體是無法控制的),是否設計的獨立,只有CPU設計人知道。),因此超執行緒切換很快,直接使用另一個超執行緒的就可以了,不需要寄存器內部資料的切換。

C語言關鍵字volatile 

編譯器編譯代碼時會進行最佳化,根據代碼上下文判斷,某個變數的值沒有變,下次使用就會直接使用寄存器裡面的值,而不會訪存。

但如果兩個進程共用一個記憶體,A進程改,B進程讀,B進程,有可能一直讀不到正確的資料,因為他一直使用寄存器裡面的值。

此時就需要寫代碼時,加上volatile關鍵字,告訴編譯器不要最佳化,直接訪存而不是拿寄存器的值。

但訪存不一定是真的訪問記憶體,有可能直接從緩衝中取值,緩衝是軟體控制不了的(代碼無法指定在記憶體讀還是在緩衝讀),是硬體控制的。

不要以為加上volatile就會強制從記憶體裡面讀,他只是告訴編譯器不要最佳化成讀寄存器,而是訪存,但訪存是訪記憶體還是訪緩衝,就是運行時硬體的事了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.