真的有場景需要用到「偏向鎖」嗎?

時間 2021-06-08 23:15:14

1樓:Balapysh

今天看了 MSEI 一點點內容。CAS 在不頻繁的併發修改情況下,效能是很高的。

我覺得這個偏向鎖真的是沒啥太大用,輕量鎖已經很好了。 反而引入了偏向鎖撤銷...

期待 jvm 早日取消掉這個偏向鎖,免得面試總問我,哈哈

2樓:

雖然偏向鎖是jvm自己優化時使用。但即時如果真的有這種能在普通編碼時用上的功能,也是有場景的。

有很多場景你有個共享狀態,雖然多數情況並沒什麼競態產生,但是確實又是有競態存在的。 那麼總不能不管它,就這麼活生生不安全的把狀態發布到多執行緒下吧。

如果完全互斥,有比較多的時間片都是某個執行緒獨用很久,每次都裝摸做樣的去互斥一次是不是有點」裝逼「, 所以就衝這點,不能這麼裝逼,做人要厚道。

3樓:

問題描述裡面的這句話其實並不準確,在偏向鎖引入之前,只有重量級鎖,缺點很明顯,系統開銷大。

在引入輕量級鎖之前,假設系統中有乙個無法容忍的執行緒安全性問題,有1%的概率會使得資料出錯,必須得修復,這個時候需要你修改,最簡單的方式就是用synchronize機制同步資料讀寫,問題解決了,但是細想一下好像解決的並不完美,雖然獲取鎖的時候只有1%的概率出現競爭,但是剩餘的99%的情況下也需要有競爭鎖的迴圈CAS,有效鎖競爭數占比1%。

引入偏向鎖,輕量級鎖就可以解決這樣的問題,在適合的場景下盡可能的降低獲取鎖和釋放鎖的開銷。獲取鎖和釋放鎖的開銷從小到大是:偏向鎖《輕量級鎖《重量級鎖,jvm鎖膨脹機制就可以在保證程式執行緒安全性的情況下原因開銷最小的鎖

4樓:太上玄元道君

偏向鎖不是你手工設定的,而是虛擬機器對互斥鎖的一種優化,互斥鎖很重量級,需要呼叫作業系統的mutex,開銷很龐大。當乙個臨界資源只被乙個執行緒獨佔的時候,實際上是不用這種開銷的,所以只用cas指令標記了臨界資源頭,這個操作是非阻塞的,標記完後就可以直接繼續執行。

當有兩個執行緒爭搶的時候,乙個執行緒進入臨界區執行,另外乙個執行緒自旋幾個CPU時鐘週期,等待進入臨界區。因為這其實是虛擬機器的一次賭博,它賭這個執行緒會在這幾個時鐘週期內獲得到鎖。而堵的原因其實也是為了優化,防止執行緒剛休眠,另外執行緒的鎖就已經釋放,也是為了減少執行緒排程的開銷。

這就是輕量級鎖。

當執行緒自旋完還沒獲得到進入臨界區的許可的時候,就會退出CPU等待,鎖會膨脹為重量級鎖,此時會呼叫作業系統級別的指令去進行加鎖。

所以偏向鎖你在程式設計的時候是不可能感覺的到的,只是虛擬機器在執行期的優化。

實習律師需要用到MacBook嗎?

李高尚 不需要,都是消費主義的陷阱。Mac不僅不會提公升工作效率,甚至還會降低工作效率。基本上律師辦公是以Word為主的,不要說什麼Mac也有office和pages,相容性真的會差很多。因為律師檔案最重要的就是格式。當然也不排除有團隊統一使用pages,但通常來說,不論是網上的資料還是實踐中常用的...

茶席設計中,需要用到的物品有哪些?

王玉川 不請自來,茶席展示的其實是自己的內心世界,你的內心由你自己掌控。就像飯桌上需要什麼餐具一樣,明白了嗎?不要被固定的程式約束,隨心更重要! 元首 之後寫了兩篇文。大家可以看看先。學茶社 如何從0開始布置一張茶席 煮水器 民眾樂園大茶館 知乎專欄 如何從0開始布置一張茶席 主泡器 民眾樂園大茶館...

製作PBR需要用到圖形學知識嗎

李天灝 這麼說吧。如果你是要做乙個開創性的,前無古人的東西。那麼,肯定是要的甚至說已經超出了美術的一般工作範疇。但是如果你只是說想學習如何實現效果,那首要工作是學習別人的效果是如果實現的。別人的成果 很多回答都說沒必要,應該是從從業者快速上手角度來看。我想說的是,答主還是個學生,不需要這麼急功近利。...