在使用Go進行多線程開發時,通常通過給隊列加鎖的方式避免並發讀寫帶來的數據丟失或重復讀取等問題,但在高並發條件下,加鎖帶來的性能降低也是必然的,因此希望通過實現lock-free queue 的算法實現無鎖隊列,提高程序性能。
通過lock-free queue ,實現無鎖隊列,進而提升Go程序性能。
隨着並發數越高,無鎖隊列的執行效率越高。
詳細方案:
引用atomic包,實現lock-free queue 算法(Compare and swap),實現無鎖隊列:
理解CAS算法的含義,大致為:
當多個線程嘗試使用CAS同時更新同一個變量時,只有其中一個線程能更新變量的值,
而其它線程都失敗,失敗的線程並不會被掛起,而是被告知這次競爭中失敗,並可以再次嘗試。