原子操作與鎖


1. 既然比較兩者性能, 必然鎖的區域極小, 可以使用原子操作代替

2. 若這個極小區域就是操作的全部, 只是頻繁被調用, 則看並發的線程數量, 在並發量小時,  線程沖突小, 而一個 yield 可以保證較長時間內其他線程不來打攪, 獲得的是一個類似批處理的結果, 性能較原子操作高; 自然, 若僅僅只有一個線程, 大家都是批處理, 還是原子操作性能高些; 隨着線程數增加, 線程沖突頻繁, 此時基本上無視線程多少的原子操作開始超越 yield 鎖; 若是 futex 鎖, 似乎比 yield 鎖可以取得更高性能;但  futex 太重, 估計要超過 yield 鎖需要的線程數是個不太現實的數字;

3, 若這個極小區域是一個較長調用的一部分, 則鎖區域比重降低, 意味着同時訪問臨界區的概率降低, 此時鎖自身的成本成為性能主要影響因素, 原子操作性能會超過yield鎖,  但由於鎖區域比重低, 因此整體性能並不會表現出很大差異

 

唯一貌似原子操作比 yield 鎖性能大很多的就是 情況 2 的極大並發下 及 鎖區域很大下, 但很大的鎖區域恐怕原子操作不能夠做等價實現, 因此沒有意義

結論就是整體而言, 原子操作性能要高些, 但有限


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM