dpdk無鎖隊列總結

免責聲明:親愛的網友,雖然我已盡力去還原本文所講內容的真實情況,但囿於水平不夠,以下內容可能全是錯的,不過還是希望對你有所啓發。

最近被問起一個問題:dpdk無鎖隊列是怎麼實現的?如何能支持多消費者、多生產者?CAS內部的實現原理是什麼?

這幾個問題彼此關聯,層層遞進。想要回答清楚,還真不容易。看了一些資料後,說說我對這幾個問題的理解。

1、不管是多生產者寫入,還是多消費者讀取,在dpdk的實現中,都會經過以下三個步驟:

  • 先偏移頭指針,說白了就是搶位置,這步主要是爲了應對多生產者和多消費者的情況
  • 搶到位置後寫入數據或者讀取數據
  • 寫入或讀取完畢後,更新尾指針,讓消費者可以消費剛寫入的數據,或者讓生產者可以寫入剛消費過的空間

2、不管是入隊列,還是出隊列,都是搶先改變頭節點的位置,

假設是入隊列,則

  • 搶先更新頭指針,此時頭指針被更新爲下一次入隊列的起始位置,此時另外一個進程也是可以同時入隊列的,只是要排隊修改尾指針
  • 然後放入數據
  • 然後更新尾指針,其他進程排隊更新尾指針

假設是出隊列,則

  • 搶先更新頭指針,此時頭指針被更新爲下一次出隊列的起始位置,此時另外一個進程也是可以同時出隊列的,只是要排隊修改尾指針
  • 然後取出數據
  • 然後更新尾指針,其他進程排隊更新尾指針

3、CAS: 是一個原子操作,由cpu的指令集提供該功能,它需要處理器鎖住它的指令流水線來保證原子性。

參考資料

1、https://www.cnblogs.com/jungle1996/p/12194243.html

2、https://www.cnblogs.com/realjimmy/p/12889079.html

3、https://blog.csdn.net/chen98765432101/article/details/69367633

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章