pause指令

__asm__ (".byte 0xf3, 0x90") intel的pause指令。

研究nginx代碼時,同事遇到上面的代碼,很是令人費解。google一翻後有了結果。原來這個指令不簡單。

PAUSE指令提升了自旋等待循環(spin-wait loop)的性能。當執行一個循環等待時,Intel P4或Intel Xeon處理器會因爲檢測到一個可能的內存順序違規(memory order violation)而在退出循環時使性能大幅下降。PAUSE指令給處理器提了個醒:這段代碼序列是個循環等待。處理器利用這個提示可以避免在大多數情況下的內存順序違規,這將大幅提升性能。因爲這個原因,所以推薦在循環等待中使用PAUSE指令。

PAUSE的另一個功能就是降低Intel P4在執行循環等待時的耗電量。Intel P4處理器在循環等待時會執行得非常快,這將導致處理器消耗大量的電力,而在循環中插入一個PAUSE指令會大幅降低處理器的電力消耗。

PAUSE指令雖然是在Intel P4處理器開始出現的,但是它可以向後與所有的IA32處理器兼容。在早期的IA32 CPU中,PAUSE就像NOP指令。Intel P4和Intel Xeon處理器將PAUSE實現成一個預定義的延遲(pre-defined delay)。這種延遲是有限的,而且一些處理器可以爲0。PAUSE指令不改變處理器的架構狀態(也就是說,它實際上只是執行了一個延遲——並不做任何其他事情——的操作)。

我們與nginx作者差着好遠呀!

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/Lu_ming/archive/2009/12/11/4984115.aspx

發佈了4 篇原創文章 · 獲贊 0 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章