您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Javaweb進程與線程的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
一個可執行程序運行起來,就可以看作是一個進程
進程也是操作系統分配資源的最小單元
一個進程在內核中都會對應一個PCB對象
一個線程就是一個 "執行流". 每個線程之間都可以按照順訊執行自己的代碼. 多個線程之間 "同時" 執行 著多份代碼.
進程id:身份表示
一組內存指針:指向進程運行時依賴的指令和數據在內存的哪個位置
進程狀態:是正在運行,還是正在休眠
進程優先級:這個進程是優先上CPU執行還是放在后面上
進程的上下文:保存了上次進程在CPU上執行的進度,以便下次進程上CPU的時候能夠繼續執行
進程的記賬信息:記錄了進程在CPU上一共執行了多長時間,通過這個時間來限制不要讓某個進程霸占CPU太久,導致其他進程無法執行
從微觀上看,一個CPU同一個時刻只能執行一個線程命令
進程太多,CPU太少
通過“并發”的方式,讓CPU快速調度,微觀上仍然是串行,但調度上極快,宏觀上就感覺是多個進程齊頭并進
首先, "并發編程" 成為 "剛需".
單核 CPU 的發展遇到了瓶頸. 要想提高算力, 就需要多核 CPU. 而并發編程能更充分利用多核 CPU 資源. 有些任務場景需要 "等待 IO", 為了讓等待 IO 的時間能夠去做一些其他的工作, 也需要用到并發編程.
其次, 雖然多進程也能實現 并發編程, 但是線程比進程更輕量.
創建線程比創建進程更快.
銷毀線程比銷毀進程更快.
調度線程比調度進程更快.
如果把一個進程看作是一個工廠,線程就是工廠中的若干流水線
線程其實包含在進程中
一個進程可能有多個線程
每一個線程都有一段自己要執行的邏輯(命令),每一個線程都是一個獨立的“執行流”
同一個進程中的很多線程之間,是共享一些資源
假如你去銀行存款,得在窗口和柜員交互
存款的過程:
1、先和柜員溝通,要存多少錢,存在那個賬戶上
2、把卡和錢交給柜員
以上都是能感知的到動作,相當于代碼在用戶態執行
3、柜員拿到東西在電腦上操作
以上是用戶感知不到的,相當于代碼在內核態執行
用戶態:權限相對比較小,只能進行一些低風險的操作
內核態:比用戶態高很多
內核只認識PCB
一個線程和一個PCB對應
一個進程可能有多個PCB
這三個PCB就對應了java.exe這個進程的三個線程,內核中也把這若干從屬同一個進程稱為“線程組”,類似于MySql中的多對一
以一個比較形象的例子,吃蘋果,100蘋果分著吃
線程:分配資源,房間+桌子
進程:調度讓小朋友去吃蘋果
一個線程中最多有多少個線程
1,CPU的個數有關
2,和線程執行的任務的類型也有關
CPU密集型:程序一直在執行計算任務
IO密集型:主要進行輸入輸出的操作
多個線程去搶奪一個資源可能造成線程不安全
一個線程如果出現拋出異常,并且沒有很好的處理這個異常,整個進程就會被終止,其他線程無法工作
關于“Javaweb進程與線程的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。