Linux

什麼是“雷擊群”問題?即使在使用自旋鎖之後,競爭條件又如何發生?

  • August 26, 2020

這裡

wait_table在頁面上等待釋放的程序等待隊列的雜湊表。這對 wait_on_page() 和 unlock_page() 很重要。雖然程序可以都在一個隊列上等待,但這會導致所有等待的程序在喚醒時競爭仍然鎖定的頁面。像這樣競爭共享資源的一大群程序有時被稱為雷霆群。等待表將在第 2.2.3 節中進一步討論;

什麼是“雷群”問題,而且頁面中提到使用了自旋鎖,即使使用自旋鎖,競爭條件怎麼會發生?競爭程序的數量真的很重要嗎?我以為不管有多少程序在競爭,只有一個程序會搶到自旋鎖,不會出現競態條件。

沒有race condition,自旋鎖確保了這一點。

thundering herd problem就是當某些事情發生時,通常是鎖被釋放或 I/O 輸入事件完成,許多一直在等待的程序將恢復。將選擇一個,其餘的通常將繼續等待鎖定或 I/O 事件。

想想新聞發布會。當提供簡報的人完成一個回答時,所有的記者都開始試圖吸引簡報者的注意力。主持人選擇一個,所有的記者都坐下,一個問題被提問和回答,然後所有的記者再次嘗試吸引註意力。這對十名記者來說效果很好,但是對於一萬名記者來說,所有試圖吸引註意力的記者都浪費了很多精力,而通過讓記者排隊並輪流提問可以提高效率。

thundering herd效率而不是正確性也是如此。

引用自:https://unix.stackexchange.com/questions/606469