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

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

2,多進(jìn)程單線程

3,單進(jìn)程多線程

4,多進(jìn)程多線程

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

