__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