亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是線程內存模型

發布時間:2021-10-14 16:08:50 來源:億速云 閱讀:125 作者:iii 欄目:大數據

本篇內容介紹了“什么是線程內存模型”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

1.內存模型圖的思維轉換

什么是線程內存模型

JVM定義了Java的虛擬內存模型,跟C/C++不一樣的是,虛擬內存將物理內存劃分了不同的區域,而C/C++是直接映射物理內存的。

籠統的來說,jvm一般將內存分為棧和堆,棧用來存儲靜態方法和靜態變量,而堆用來存儲對象和普通變量。

但是如果從線程的角度,內存模型會變成下圖的樣子

什么是線程內存模型

在這個模型中,變量是在主內存中的,線程各自有各自的工作內存,不會出現相互干擾。

工作內存通過跟主內存之間的操作,實現變量數據的交換共享。而線程工作內存是相互隔離的。這樣各線程工作的時候不會對其他線程的工作數據產生影響

2.實例解析線程內存模型

什么是線程內存模型

如上圖所示,左邊是一個簡單的賣票程序,右邊是程序加載的內存模型,當程序通過類加載器加載到方法區后,在棧中建立的main方法的線程,創建了Tiecket t 的變量后,會在堆中建立該對象的成員變量tickets和方法

什么是線程內存模型

當在main方法中創建窗口1和窗口1線程后,每個線程都會有獨立的棧內存空間,而這些棧內存共享相同的變量tickets

什么是線程內存模型

3.工作內存和主內存之間的操作(單個線程)

兩塊內存有8種操作。

  1. (lock - unlock) lock將一個主內存變量標記成線程獨占,unlock將獨占的變量釋放

  2. (read - load)read 將主內存的變量讀取到CPU中,load操作將read到的變量存入到工作內存中,一定會成對出現

  3. (use - assign) use將工作內存中的變量傳遞給執行的代碼中,當代碼需要使用變量值的字節碼時,需要這個操作。 assign 賦值操作,將代碼中賦值指令出現時,把收到的變量賦值到工作內存中

  4. (store - write) store 將工作內存的變量傳送回主內存,但是只是傳送,write操作才會將值寫入到主內存。而且這兩個一定會成對出現


  • read load ; store write只能成對操作,不能出現只讀不用,只返回不存儲

  • 不允許線程丟棄assign操作,用完的變量一定會傳回主內存,也不允許將未assign的變量從工作內存寫回主內存

  • 變量只能從主內存中創建,未初始化的變量線程不能load 或 assign

  • 變量只能被一條線程lock,而且可以lock很多次,必須執行相應條數的unlock才會被釋放

  • 線程只能unlock自己lock的變量,未被lock的變量不能執行unlock,不允許unlock其他線程lock的變量

  • lock變量操作會將工作內存的變量清空,使用這個變量時,相應使用這個變量時,需要重新load 和assign

  • unlock 前,變量會被重新寫入主內存

“什么是線程內存模型”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长宁县| 渝北区| 北碚区| 满洲里市| 许昌市| 登封市| 厦门市| 澎湖县| 万源市| 木兰县| 泰安市| 金沙县| 合水县| 耿马| 文成县| 虞城县| 广元市| 班戈县| 聂荣县| 东安县| 濉溪县| 平阳县| 察隅县| 金昌市| 社会| 措勤县| 甘洛县| 吉安市| 崇明县| 金秀| 江北区| 台前县| 碌曲县| 资源县| 津南区| 丘北县| 通河县| 田阳县| 长武县| 南投县| 利津县|