欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java并發(fā)編程之進(jìn)程和線程調(diào)度基礎(chǔ)詳解

 更新時(shí)間:2023年06月28日 10:13:17   作者:千月落  
這篇文章主要介紹了java并發(fā)編程之進(jìn)程和線程調(diào)度基礎(chǔ),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

1.什么是進(jìn)程

進(jìn)程(process)是計(jì)算機(jī)中的程序關(guān)于某數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),是系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)。

在早期面向進(jìn)程設(shè)計(jì)的計(jì)算機(jī)結(jié)構(gòu)中,進(jìn)程是程序的基本執(zhí)行實(shí)體;在當(dāng)代面向線程設(shè)計(jì)的計(jì)算機(jī)結(jié)構(gòu)中,進(jìn)程是線程的容器。

——摘自百度百科

該怎么理解這句話呢,首先進(jìn)程和線程都是操作系統(tǒng)層面的概念,不是某種編程語(yǔ)言提出的。進(jìn)程是操作系統(tǒng)進(jìn)行資源分配的最小單位,其中資源包括:CPU、內(nèi)存空間、磁盤IO等。進(jìn)程是程序在計(jì)算機(jī)上的一次執(zhí)行活動(dòng)。顯然,程序是死的、靜態(tài)的,進(jìn)程是活的、動(dòng)態(tài)的。

進(jìn)程可以分為系統(tǒng)進(jìn)程用戶進(jìn)程,凡是用于完成操作系統(tǒng)的各種功能的進(jìn)程就是系統(tǒng)進(jìn)程,它們就是處于運(yùn)行狀態(tài)下的操作系統(tǒng)本身,用戶進(jìn)程就是所有由你啟動(dòng)的進(jìn)程。

當(dāng)你運(yùn)行一個(gè)程序,你就啟動(dòng)了一個(gè)進(jìn)程。例如我們使用java語(yǔ)言在windows系統(tǒng)中啟動(dòng)一個(gè)main方法,就會(huì)系統(tǒng)就會(huì)創(chuàng)建一個(gè)名為java.exe的進(jìn)程。

windows系統(tǒng)中使用直接使用任務(wù)管理器查看進(jìn)程

在這里插入圖片描述

windows系統(tǒng)中dos窗口鍵入 tasklist 命令查看進(jìn)程

在這里插入圖片描述

linux系統(tǒng)中可以使用ps命令查看進(jìn)程

在這里插入圖片描述

2.什么是線程

線程(thread)是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的最小單位。

它被包含在進(jìn)程之中,是進(jìn)程中的實(shí)際運(yùn)作單位。

一條線程指的是進(jìn)程中一個(gè)單一順序的控制流,一個(gè)進(jìn)程中可以并發(fā)多個(gè)線程,每條線程并行執(zhí)行不同的任務(wù)。

線程自己基本上不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源(如程序計(jì)數(shù)器,一組寄存器和棧),但是它可與同屬一個(gè)進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源。

3.進(jìn)程和線程的區(qū)別與聯(lián)系

聯(lián)系:

  • 進(jìn)程是線程的容器,一個(gè)進(jìn)程可以創(chuàng)建多個(gè)線程分支,兩者之間存在包含關(guān)系。
  • 兩者都是多任務(wù)編程方式,都能使用計(jì)算機(jī)的多核資源。
  • 線程具有進(jìn)程的許多特征,故又稱輕型進(jìn)程,傳統(tǒng)進(jìn)程稱重型進(jìn)程。
  • 一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程。
  • 線程是CPU調(diào)度的最小單位,必須依賴于進(jìn)程而存在

區(qū)別

  • 其實(shí)從概念上看的出,進(jìn)程主要用于操作系統(tǒng)資源分配,線程主要在于CPU運(yùn)算調(diào)度
  • 進(jìn)程和進(jìn)程之間是相互獨(dú)立的,每個(gè)進(jìn)程有獨(dú)立的地址空間,一個(gè)進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對(duì)其它進(jìn)程產(chǎn)生影響。而同一個(gè)進(jìn)程下的多個(gè)線程共享資源。
  • 線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高。
  • 在執(zhí)行過(guò)程中,每個(gè)獨(dú)立的線程有一個(gè)程序運(yùn)行的入口、順序執(zhí)行序列和程序的出口。但是線程不能夠獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制。
  • 相對(duì)進(jìn)程而言,線程是一個(gè)更加接近于執(zhí)行體的概念,它可以與同進(jìn)程中的其他線程共享數(shù)據(jù),但擁有自己的棧空間,擁有獨(dú)立的執(zhí)行序列。

4.CPU內(nèi)核數(shù)和線程數(shù)的關(guān)系

通常我們?cè)谶x購(gòu)電腦的時(shí)候,CPU是一個(gè)需要考慮到核心因素,因?yàn)樗鼪Q定了電腦的性能等級(jí)。

CPU從早期的單核,發(fā)展到現(xiàn)在的雙核,多核。在介紹CPU屬性時(shí)經(jīng)常會(huì)說(shuō)“幾核幾線程”。

那么這個(gè)參數(shù)到底代表什么意思呢?

“幾核”,就是指CPU核心數(shù),“幾線程”,就是線程數(shù),也稱邏輯CPU個(gè)數(shù)。

CPU的核心數(shù) 是指物理上,也就是硬件上存在著幾個(gè)核心。比如,雙核就是包括2個(gè)相對(duì)獨(dú)立的CPU核心單元組,四核就包含4個(gè)相對(duì)獨(dú)立的CPU核心單元組。

線程數(shù) 表示該CPU能同一時(shí)刻能夠執(zhí)行的最大線程數(shù)量 也稱邏輯CPU數(shù) 是一種邏輯的概念,簡(jiǎn)單地說(shuō),就是模擬出的CPU核心數(shù)。一個(gè)核心最少對(duì)應(yīng)一個(gè)線程,但引入超線程技術(shù)后一個(gè)核心可以對(duì)應(yīng)兩個(gè)線程,也就是說(shuō)它可以同時(shí)運(yùn)行兩個(gè)線程。

對(duì)于win7操作系統(tǒng)來(lái)說(shuō)

我們從任務(wù)管理器的性能標(biāo)簽頁(yè),以及設(shè)備管理器中處理器看到的就是線程數(shù)。

在這里插入圖片描述

在這里插入圖片描述

DOS窗口中輸入“wmic”

然后在出現(xiàn)的新窗口中輸入“cpu get * ”也可查看物理CPU數(shù)、CPU核心數(shù)、線程數(shù)。

  • Name:物理CPU名稱
  • NumberOfCores:表示CPU核心數(shù)
  • NumberOfLogicalProcessors:表示CPU線程數(shù)

在這里插入圖片描述

所以我這臺(tái)win7主機(jī)CPU配置的就是 2核心 4線程

而對(duì)于win10系統(tǒng)來(lái)說(shuō),任務(wù)管理器中已經(jīng)標(biāo)明了線程數(shù)。

在這里插入圖片描述

在Linux系統(tǒng)中,可以根據(jù)下面命令查看

查詢CPU個(gè)數(shù):

cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

查詢核心數(shù):

cat /proc/cpuinfo| grep "cpu cores"| uniq

查詢邏輯CPU總數(shù)(線程數(shù)):

cat /proc/cpuinfo| grep "processor"| wc -l

在這里插入圖片描述

當(dāng)然我們java也可以查看CPU線程數(shù)

public static void main(String[] args) {
        int i = Runtime.getRuntime().availableProcessors();
        System.out.println("當(dāng)前主機(jī)CPU線程數(shù):"+i);
}

在這里插入圖片描述

5.CPU時(shí)間片輪轉(zhuǎn)調(diào)度機(jī)制

不知道大家有沒(méi)有疑問(wèn),一般高配置服務(wù)器的CPU 核心數(shù)也僅僅有32核,使用超線程技術(shù)同一時(shí)刻能執(zhí)行的最大線程數(shù)也就是64,而服務(wù)器卻能承載一秒10w多的訪問(wèn)量。而且我們平時(shí)在開發(fā)的時(shí)候,感覺(jué)并沒(méi)有受 CPU 核心數(shù)的限制,想啟動(dòng)線程就啟動(dòng)線程,哪怕是在單核 CPU 上,為什么?

其實(shí)首先我們得明確兩個(gè)概念,一個(gè)是并行 一個(gè)是并發(fā)

并行 是指兩個(gè)或者多個(gè)事件在同一時(shí)刻發(fā)生。

并發(fā) 是指兩個(gè)或多個(gè)事件在同一時(shí)間間隔發(fā)生,當(dāng)談?wù)摬l(fā)的時(shí)候一定要加個(gè)單位時(shí)間,也就是說(shuō)單位時(shí)間內(nèi)并發(fā)量是多少?離開了單位時(shí)間其實(shí)是沒(méi)有意義的。

所以可以說(shuō),上面那個(gè)服務(wù)器 并行數(shù)是64,而每秒能承載的并發(fā)量是10w

那么CPU怎么做到每秒執(zhí)行10w線程數(shù)的呢,這是由于操作系統(tǒng)提供了一種CPU時(shí)間片輪轉(zhuǎn)調(diào)度機(jī)制。

操作系統(tǒng)一般是按照一定策略,定期給每個(gè)活動(dòng)的進(jìn)程執(zhí)行其內(nèi)部程序的機(jī)會(huì),并且每次只執(zhí)行一小段時(shí)間,然后操作系統(tǒng)利用中斷強(qiáng)行退出執(zhí)行,將當(dāng)前程序信息壓棧,然后開始執(zhí)行下一個(gè)進(jìn)程的一小段程序。通過(guò)這樣不斷快速的循環(huán)切換,每個(gè)程序都獲得執(zhí)行,在用戶看來(lái),感覺(jué)到很多程序都在平行的執(zhí)行。

當(dāng)然在自己的程序運(yùn)行時(shí)不是獨(dú)一無(wú)二的,我們看似很順暢的工作,其實(shí)是由一個(gè)個(gè)的執(zhí)行片段構(gòu)成的,我們眼中相鄰的兩條語(yǔ)句甚至同一個(gè)語(yǔ)句中兩個(gè)不同的運(yùn)算符之間,都有可能插入其他線程或進(jìn)程的動(dòng)作。

時(shí)間片輪轉(zhuǎn)調(diào)度是一種最古老、最簡(jiǎn)單、最公平且使用最廣的算法,又稱RR(Round-Robin)調(diào)度。

每個(gè)進(jìn)程被分配一個(gè)時(shí)間段,稱作它的時(shí)間片,即該進(jìn)程允許運(yùn)行的時(shí)間。

百度百科對(duì)CPU時(shí)間片輪轉(zhuǎn)機(jī)制原理解釋如下:

如果在時(shí)間片結(jié)束時(shí)進(jìn)程還在運(yùn)行,則CPU將被剝奪并分配給另一個(gè)進(jìn)程。

如果進(jìn)程在時(shí)間片結(jié)束前阻塞或結(jié)束,則CPU當(dāng)即進(jìn)行切換。

調(diào)度程序所要做的就是維護(hù)一張就緒進(jìn)程列表,當(dāng)進(jìn)程用完它的時(shí)間片后,它被移到隊(duì)列的末尾。

時(shí)間片輪轉(zhuǎn)算法的基本思想是,系統(tǒng)將所有的就緒進(jìn)程按先來(lái)先服務(wù)算法的原則,排成一個(gè)隊(duì)列,每次調(diào)度時(shí),系統(tǒng)把處理機(jī)分配給隊(duì)列首進(jìn)程,并讓其執(zhí)行一個(gè)時(shí)間片。

當(dāng)執(zhí)行的時(shí)間片用完時(shí),由一個(gè)計(jì)時(shí)器發(fā)出時(shí)鐘中斷請(qǐng)求,調(diào)度程序根據(jù)這個(gè)請(qǐng)求停止該進(jìn)程的運(yùn)行,將它送到就緒隊(duì)列的末尾,再把處理機(jī)分給就緒隊(duì)列中新的隊(duì)列首進(jìn)程,同時(shí)讓它也執(zhí)行一個(gè)時(shí)間片。

6.上下文切換

而這種時(shí)間片輪轉(zhuǎn)是有代價(jià)的,往往還會(huì)伴隨著上下文切換。  

任何對(duì)進(jìn)程或者線程的調(diào)度,都會(huì)引入額外的開銷,這個(gè)開銷中就包括上下文切換(Context Switch),有時(shí)也稱做進(jìn)程切換或任務(wù)切換,是指CPU 從一個(gè)進(jìn)程或線程切換到另一個(gè)進(jìn)程或線程。

在上下文切換過(guò)程中,CPU會(huì)停止處理當(dāng)前運(yùn)行的程序,并保存當(dāng)前程序運(yùn)行的具體位置以便之后繼續(xù)運(yùn)行。從這個(gè)角度來(lái)看,上下文切換有點(diǎn)像我們同時(shí)閱讀幾本書,在來(lái)回切換書本的同時(shí)我們需要記住每本書當(dāng)前讀到的頁(yè)碼。

例如我們經(jīng)常用做緩存的redis,采用的就是單線程的方式,大大減少上下文切換產(chǎn)生的額外開銷。

上下文切換通常是計(jì)算密集型的。也就是說(shuō)上下文切換對(duì)系統(tǒng)來(lái)說(shuō)意味著消耗大量的 CPU 時(shí)間,事實(shí)上,可能是操作系統(tǒng)中時(shí)間消耗最大的操作。

根據(jù)Tsuna的測(cè)試報(bào)告,每次上下文切換都需要幾十納秒到數(shù)微妙的CPU時(shí)間。這個(gè)時(shí)間還是相當(dāng)可觀的,特別是上下文切換次數(shù)較多的情況下,很容易導(dǎo)致CPU將大量的時(shí)間耗費(fèi)在寄存器、內(nèi)核棧、以及虛擬內(nèi)存等資源的保存和恢復(fù)上,進(jìn)而大大縮短了真正運(yùn)行的時(shí)間。

引起線程上下文切換的原因大概有以下幾種:

  • 當(dāng)前執(zhí)行任務(wù)的時(shí)間片用完之后,系統(tǒng)CPU正常調(diào)度下一個(gè)任務(wù)。
  • 當(dāng)前執(zhí)行任務(wù)碰到IO阻塞,調(diào)度器將此任務(wù)掛起,繼續(xù)下一任務(wù)。
  • 多個(gè)任務(wù)搶占鎖資源,當(dāng)前任務(wù)沒(méi)有搶到鎖資源,被調(diào)度器掛起,繼續(xù)下一任務(wù)。
  • 用戶代碼掛起當(dāng)前任務(wù),讓出CPU時(shí)間。

7.并發(fā)編程的意義、好處

由于多核多線程的CPU的誕生,多線程、高并發(fā)的編程越來(lái)越受重視和關(guān)注。多線程可以給程序帶來(lái)如下好處。

(1)充分利用CPU的資源

從上面的CPU的介紹,可以看的出來(lái),現(xiàn)在市面上沒(méi)有CPU的內(nèi)核不使用多線程并發(fā)機(jī)制的,特別是服務(wù)器還不止一個(gè)CPU,如果還是使用單線程的技術(shù)做思路,明顯就out了。因?yàn)槌绦虻幕菊{(diào)度單元是線程,并且一個(gè)線程也只能在一個(gè)CPU的一個(gè)核的一個(gè)線程跑,如果你是個(gè)i3的CPU的話,最差也是雙核心4線程的運(yùn)算能力:如果是一個(gè)線程的程序的話,那是要浪費(fèi)3/4的CPU性能:如果設(shè)計(jì)一個(gè)多線程的程序的話,那它就可以同時(shí)在多個(gè)CPU的多個(gè)核的多個(gè)線程上跑,可以充分地利用CPU,減少CPU的空閑時(shí)間,發(fā)揮它的運(yùn)算能力,提高并發(fā)量。

就像我們平時(shí)坐地鐵一樣,很多人坐長(zhǎng)線地鐵的時(shí)候都在認(rèn)真看書,而不是到家了再去看書,這樣你的時(shí)間就相當(dāng)于有了兩倍。這就是為什么有些人時(shí)間很充裕,而有些人老是說(shuō)沒(méi)時(shí)間的一個(gè)原因,工作也是這樣,有的時(shí)候可以并發(fā)地去做幾件事情,充分利用我們的時(shí)間,CPU也是一樣,也要充分利用。

(2)加快響應(yīng)用戶的時(shí)間

比如我們經(jīng)常用的迅雷下載,都喜歡多開幾個(gè)線程去下載,誰(shuí)都不愿意用一個(gè)線程去下載,為什么呢?答案很簡(jiǎn)單,就是多個(gè)線程下載快啊。

(3)可以使你的代碼模塊化,異步化,簡(jiǎn)單化

例如我們實(shí)現(xiàn)電商系統(tǒng),下訂單和給用戶發(fā)送短信、郵件就可以進(jìn)行拆分,將給用戶發(fā)送短信、郵件這兩個(gè)步驟獨(dú)立為單獨(dú)的模塊,并交給其他線程去執(zhí)行。這樣既增加了異步的操作,提升了系統(tǒng)性能,又使程序模塊化,清晰化和簡(jiǎn)單化。

多線程應(yīng)用開發(fā)的好處還有很多,大家在日后的代碼編寫過(guò)程中可以慢慢體會(huì)它的魅力。

8.并發(fā)編程需要注意事項(xiàng)

1.線程之間的安全性

從前面的章節(jié)中我們都知道,在同一個(gè)進(jìn)程里面的多線程是資源共享的,也就是都可以訪問(wèn)同一個(gè)內(nèi)存地址當(dāng)中的一個(gè)變量。

例如:若每個(gè)線程中對(duì)全局變量、靜態(tài)變量只有讀操作,而無(wú)寫操作,一般來(lái)說(shuō),這個(gè)全局變量是線程安全的:若有多個(gè)線程同時(shí)執(zhí)行寫操作,一般都需要考慮線程同步,否則就可能影響線程安全。

2.線程之間的死鎖

為了解決線程之間的安全性引入了Java的鎖機(jī)制,而一不小心就會(huì)產(chǎn)生Java線程死鎖的多線程問(wèn)題,因?yàn)椴煌木€程都在等待那些根本不可能被釋放的鎖,從而導(dǎo)致所有的工作都無(wú)法完成。假設(shè)有兩個(gè)線程,分別代表兩個(gè)饑餓的人,他們必須共享刀叉并輪流吃飯。他們都需要獲得兩個(gè)鎖:共享刀和共享叉的鎖。

假如線程A獲得了刀,而線程B獲得了叉。線程A就會(huì)進(jìn)入阻塞狀態(tài)來(lái)等待獲得叉,而線程B則阻塞來(lái)等待線程A所擁有的刀。這只是人為設(shè)計(jì)的例子,但盡管在運(yùn)行時(shí)很難探測(cè)到,這類情況卻時(shí)常發(fā)生

3.線程太多了會(huì)將服務(wù)器資源耗盡形成死機(jī)宕機(jī)

線程數(shù)太多有可能造成系統(tǒng)創(chuàng)建大量線程而導(dǎo)致消耗完系統(tǒng)內(nèi)存以及CPU的“過(guò)渡切換”,造成系統(tǒng)的死機(jī),那么我們?cè)撊绾谓鉀Q這類問(wèn)題呢?

某些系統(tǒng)資源是有限的,如文件描述符。多線程程序可能耗盡資源,因?yàn)槊總€(gè)線程都可能希望有一個(gè)這樣的資源。如果線程數(shù)相當(dāng)大,或者某個(gè)資源的侯選線程數(shù)遠(yuǎn)遠(yuǎn)超過(guò)了可用的資源數(shù)則最好使用資源池。一個(gè)最好的示例是數(shù)據(jù)庫(kù)連接池。只要線程需要使用一個(gè)數(shù)據(jù)庫(kù)連接,它就從池中取出一個(gè),使用以后再將它返回池中。資源池也稱為資源庫(kù)。

多線程應(yīng)用開發(fā)的注意事項(xiàng)很多,希望大家在日后的工作中可以慢慢體會(huì)它的危險(xiǎn)所在。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java Random.nextInt()方法的具體使用

    java Random.nextInt()方法的具體使用

    這篇文章主要介紹了java Random.nextInt()方法的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • spring boot @PathVariable傳遞帶反斜杠參數(shù) / 的處理

    spring boot @PathVariable傳遞帶反斜杠參數(shù) / 的處理

    這篇文章主要介紹了spring boot @PathVariable傳遞帶反斜杠參數(shù) / 的處理操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • 濫用@PathVariable導(dǎo)致bug原因分析解決

    濫用@PathVariable導(dǎo)致bug原因分析解決

    這篇文章主要為大家介紹了濫用@PathVariable導(dǎo)致bug原因分析解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Spring?@bean和@component注解區(qū)別

    Spring?@bean和@component注解區(qū)別

    本文主要介紹了Spring?@bean和@component注解區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • SpringSecurity JWT基于令牌的無(wú)狀態(tài)認(rèn)證實(shí)現(xiàn)

    SpringSecurity JWT基于令牌的無(wú)狀態(tài)認(rèn)證實(shí)現(xiàn)

    Spring Security中實(shí)現(xiàn)基于JWT的無(wú)狀態(tài)認(rèn)證是一種常見的做法,本文就來(lái)介紹一下SpringSecurity JWT基于令牌的無(wú)狀態(tài)認(rèn)證實(shí)現(xiàn),感興趣的可以了解一下
    2025-04-04
  • Java Socket編程實(shí)例(四)- NIO TCP實(shí)踐

    Java Socket編程實(shí)例(四)- NIO TCP實(shí)踐

    這篇文章主要講解Java Socket編程中NIO TCP的實(shí)例,希望能給大家做一個(gè)參考。
    2016-06-06
  • java中Servlet處理亂碼的方法

    java中Servlet處理亂碼的方法

    java中Servlet處理亂碼的方法,需要的朋友可以參考一下
    2013-03-03
  • Java中JSONObject與JSONArray的使用區(qū)別詳解

    Java中JSONObject與JSONArray的使用區(qū)別詳解

    這篇文章主要介紹了Java中JSONObject與JSONArray的使用區(qū)別詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • Maven中兩個(gè)命令clean 和 install的使用

    Maven中兩個(gè)命令clean 和 install的使用

    Maven是一個(gè)項(xiàng)目管理和自動(dòng)構(gòu)建工具,clean命令用于刪除項(xiàng)目中由先前構(gòu)建生成的target目錄,install命令用于將打包好的jar包安裝到本地倉(cāng)庫(kù)中,供其他項(xiàng)目依賴使用,下面就來(lái)詳細(xì)的介紹一下這兩個(gè)命令
    2024-09-09
  • Springboot優(yōu)化內(nèi)置服務(wù)器Tomcat優(yōu)化方式(underTow)

    Springboot優(yōu)化內(nèi)置服務(wù)器Tomcat優(yōu)化方式(underTow)

    本文詳細(xì)介紹了Spring Boot中Tomcat和Undertow服務(wù)器的配置和優(yōu)化,包括初始線程數(shù)、最大線程數(shù)、最小備用線程數(shù)、最大請(qǐng)求數(shù)等參數(shù)的優(yōu)化建議,以及在高并發(fā)場(chǎng)景下Undertow相對(duì)于Tomcat的優(yōu)勢(shì)
    2024-12-12

最新評(píng)論