記憶體屏障除了確保原子操作的執行順序之外,是否還能提高原子操作的可見速度?
在生產者-消費者的上下文中隊列中,通常的情況是生產者儲存的資料旨在盡快對消費者可見。人們可能想知道在生產者的儲存操作和消費者的載入操作之間添加硬體記憶體柵欄是否有助於實現這一目標。
但是,新增記憶體柵欄不會顯著影響多執行緒中原子操作的延遲。核心系統。原因是硬體已經確保儲存操作對所有其他核心的可見性,無論是否存在記憶體柵欄。
沒有柵欄會發生什麼事?
在沒有柵欄的情況下,生產者俱有釋放記憶體順序的儲存操作保證在將來的某個時刻對所有其他核心可見。在 x86 架構上,不存在硬體屏障,而在 ARM 架構上,柵欄放置在儲存作業之前(在生產者端)和載入作業之後(在消費者端)。
儘管沒有在 x86 的情況下使用硬體柵欄,沒有柵欄的生產者儲存的值最終將被沒有柵欄的載入操作觀察到。此過程可能需要幾次不成功的載入嘗試,但最終會成功。
記憶體屏障對延遲的影響
增加記憶體屏障通常不會減少延遲因以下原因觀察儲存值的延遲:
結論
在大多數情況下,添加不必要的記憶體屏障生產者-消費者隊列中原子操作之間的記憶體屏障不會改善延遲。硬體已經保證了原子操作的可見性,而不需要明確的記憶體屏障。分析對於識別記憶體屏障有益的情況至關重要,並且應該僅在必要時使用它。
以上是記憶體屏障會加速生產者-消費者隊列的原子操作嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!