圖解分析Javaweb進程與線程
一、認識進程
1,線程初識
一個可執(zhí)行程序運行起來,就可以看作是一個進程
進程也是操作系統(tǒng)分配資源的最小單元
一個進程在內(nèi)核中都會對應一個PCB對象
一個線程就是一個 "執(zhí)行流". 每個線程之間都可以按照順訊執(zhí)行自己的代碼. 多個線程之間 "同時" 執(zhí)行 著多份代碼.
2,進程屬性
進程id:身份表示
一組內(nèi)存指針:指向進程運行時依賴的指令和數(shù)據(jù)在內(nèi)存的哪個位置
進程狀態(tài):是正在運行,還是正在休眠
進程優(yōu)先級:這個進程是優(yōu)先上CPU執(zhí)行還是放在后面上
進程的上下文:保存了上次進程在CPU上執(zhí)行的進度,以便下次進程上CPU的時候能夠繼續(xù)執(zhí)行
進程的記賬信息:記錄了進程在CPU上一共執(zhí)行了多長時間,通過這個時間來限制不要讓某個進程霸占CPU太久,導致其他進程無法執(zhí)行
從微觀上看,一個CPU同一個時刻只能執(zhí)行一個線程命令
進程太多,CPU太少
通過“并發(fā)”的方式,讓CPU快速調(diào)度,微觀上仍然是串行,但調(diào)度上極快,宏觀上就感覺是多個進程齊頭并進
二、為什么要有線程
首先, "并發(fā)編程" 成為 "剛需".
單核 CPU 的發(fā)展遇到了瓶頸. 要想提高算力, 就需要多核 CPU. 而并發(fā)編程能更充分利用多核 CPU 資源. 有些任務場景需要 "等待 IO", 為了讓等待 IO 的時間能夠去做一些其他的工作, 也需要用到并發(fā)編程.
其次, 雖然多進程也能實現(xiàn) 并發(fā)編程, 但是線程比進程更輕量.
創(chuàng)建線程比創(chuàng)建進程更快.
銷毀線程比銷毀進程更快.
調(diào)度線程比調(diào)度進程更快.
三、認識線程與進程的區(qū)別
如果把一個進程看作是一個工廠,線程就是工廠中的若干流水線
線程其實包含在進程中
一個進程可能有多個線程
每一個線程都有一段自己要執(zhí)行的邏輯(命令),每一個線程都是一個獨立的“執(zhí)行流”
同一個進程中的很多線程之間,是共享一些資源
四、Linux中的線程
1,內(nèi)核態(tài)與用戶態(tài)
假如你去銀行存款,得在窗口和柜員交互
存款的過程:
1、先和柜員溝通,要存多少錢,存在那個賬戶上
2、把卡和錢交給柜員
以上都是能感知的到動作,相當于代碼在用戶態(tài)執(zhí)行
3、柜員拿到東西在電腦上操作
以上是用戶感知不到的,相當于代碼在內(nèi)核態(tài)執(zhí)行
用戶態(tài):權(quán)限相對比較小,只能進行一些低風險的操作
內(nèi)核態(tài):比用戶態(tài)高很多
2,PCB描述線程

內(nèi)核只認識PCB
一個線程和一個PCB對應
一個進程可能有多個PCB
這三個PCB就對應了java.exe這個進程的三個線程,內(nèi)核中也把這若干從屬同一個進程稱為“線程組”,類似于MySql中的多對一
五、多種類型
以一個比較形象的例子,吃蘋果,100蘋果分著吃
線程:分配資源,房間+桌子
進程:調(diào)度讓小朋友去吃蘋果
1,單進程單線程

2,多進程單線程

3,單進程多線程

4,多進程多線程

5,進程中線程分析
一個線程中最多有多少個線程
1,CPU的個數(shù)有關(guān)
2,和線程執(zhí)行的任務的類型也有關(guān)
CPU密集型:程序一直在執(zhí)行計算任務
IO密集型:主要進行輸入輸出的操作
多個線程去搶奪一個資源可能造成線程不安全
一個線程如果出現(xiàn)拋出異常,并且沒有很好的處理這個異常,整個進程就會被終止,其他線程無法工作
到此這篇關(guān)于圖解分析Javaweb進程與線程的文章就介紹到這了,更多相關(guān)Javaweb 進程 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解spring cloud整合Swagger2構(gòu)建RESTful服務的APIs
這篇文章主要介紹了詳解spring cloud整合Swagger2構(gòu)建RESTful服務的APIs,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01
Java中使用MyBatis-Plus操作數(shù)據(jù)庫的實例
本文主要介紹了Java中使用MyBatis-Plus操作數(shù)據(jù)庫的實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-02-02
Java 帶參數(shù)與帶返回值的方法的定義和調(diào)用
在java中,方法就是用來完成解決某件事情或?qū)崿F(xiàn)某個功能的辦法。方法實現(xiàn)的過程中,會包含很多條語句用于完成某些有意義的功能——通常是處理文本,控制輸入或計算數(shù)值,這篇文章我們來探究一下帶參數(shù)與帶返回值的方法的定義和調(diào)用2022-04-04
jpa多條件查詢重寫Specification的toPredicate方法
這篇文章主要介紹了多條件查詢重寫Specification的toPredicate方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
SpringBoot對靜態(tài)資源的映射規(guī)則詳解
在Web應用中會涉及到大量的靜態(tài)資源,例如 JS、CSS和HTML等,我們知道,Spring MVC 導入靜態(tài)資源文件時,需要配置靜態(tài)資源的映射,但在 SpringBoot 中則不再需要進行此項配置,因為SpringBoot已經(jīng)默認完成了這一工作,本文給大家介紹了SpringBoot對靜態(tài)資源的映射規(guī)則詳2024-12-12

