成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試突擊:為什么需要線程池?什么是池化技術?

開發 前端
在 Java 語言中,提高程序的執行效率有兩種實現方法,一個是使用線程、另一個是使用線程池,今天我們就來聊聊線程池的優點,以及池化技術及其應用。

作者 | 磊哥

來源 | Java面試真題解析(ID:aimianshi666)

轉載請聯系授權(微信ID:GG_Stone)

在 Java 語言中,提高程序的執行效率有兩種實現方法,一個是使用線程、另一個是使用線程池。而在生產環境下,我們通常會采用后者。為什么會這樣呢?今天我們就來聊聊線程池的優點,以及池化技術及其應用。

池化技術

池化技術指的是提前準備一些資源,在需要時可以重復使用這些預先準備的資源。池化技術的優點主要有兩個:提前準備和重復利用。以 Java 語言中的對象創建為例,在對象創建時要經歷以下步驟:

  1. 根據 new 標識符后面的參數,在常量池查找類的符號引用;
  2. 如果沒找到符號應用(類并未加載),進行類的加載、解析、初始化等;
  3. 虛擬機為對象在堆中分配內存,并將分配的內存初始化為 0,針對對象頭,建立相應的描述結構(耗時操作:需要查找堆中的空閑區域,修改內存分配狀態等);
  4. 調用對象的初始化方法(耗時操作:用戶的復雜的邏輯驗證等操作,如IO、數值計算是否符合規定等)。

從上述的流程中可以看出,創建一個類需要經歷復雜且耗時的操作,因此我們應該盡量復用已有的類,以確保程序的高效運行,當然如果能夠提前創建這些類就再好不過了,而這些功能的實現依靠的就是池化技術。

池化技術應用

常見的池化技術的應用有:線程池、內存池、數據庫連接池、HttpClient 連接池等,接下來,我們分別來看。

線程池

線程池的原理很簡單,類似于操作系統中的緩沖區的概念。線程池中會先啟動若干數量的線程,這些線程都處于睡眠狀態。當客戶端有一個新的請求時,就會喚醒線程池中的某一個睡眠的線程,讓它來處理客戶端的這個請求,當處理完這個請求之后,線程又處于睡眠的狀態。線程池能很高地提升程序的性能。比如有一個省級數據大集中的銀行網絡中心,高峰期每秒的客戶端請求并發數超過 100,如果為每個客戶端請求創建一個新的線程的話,那耗費的 CPU 時間和內存都是十分驚人的,如果采用一個擁有 200 個線程的線程池,那將會節約大量的系統資源,使得更多的 CPU 時間和內存用來處理實際的商業應用,而不是頻繁的線程創建和銷毀。

內存池

如何更好地管理應用程序內存的使用,同時提高內存使用的頻率,這時值得每一個開發人員深思的問題。內存池(Memory Pool)就提供了一個比較可行的解決方案。內存池在創建的過程中,會預先分配足夠大的內存,形成一個初步的內存池。然后每次用戶請求內存的時候,就會返回內存池中的一塊空閑的內存,并將這塊內存的標志置為已使用。當內存使用完畢釋放內存的時候,也不是真正地調用 free 或 delete 的過程,而是把內存放回內存池的過程,且放回的過程要把標志置為空閑。最后,應用程序結束就會將內存池銷毀,將內存池中的每一塊內存釋放。內存池的優點:

  • 減少內存碎片的產生,這個優點可以從創建內存池的過程中看出,當我們在創建內存池的時候,分配的都是一塊塊比較規整的內存塊,減少內存碎片的產生。
  • 提高了內存的使用頻率。這個可以從分配內存和釋放內存的過程中看出。每次的分配和釋放并不是去調用系統提供的函數或操作符去操作實際的內存,而是在復用內存池中的內存。

內存池的缺點:會造成內存的浪費,因為要使用內存池需要在一開始分配一大塊閑置的內存,而這些內存不一定全部被用到。

數據庫連接池

數據庫連接池的基本思想是在系統初始化的時候將數據庫連接作為對象存儲在內存中,當用戶需要訪問數據庫的時候,并非建立一個新的連接,而是從連接池中取出一個已建立的空閑連接對象。在使用完畢后,用戶也不是將連接關閉,而是將連接放回到連接池中,以供下一個請求訪問使用,而這些連接的建立、斷開都是由連接池自身來管理的。同時,還可以設置連接池的參數來控制連接池中的初始連接數、連接的上下限數和每個連接的最大使用次數、最大空閑時間等。當然,也可以通過連接池自身的管理機制來監視連接的數量、使用情況等。

HttpClient連接池

HttpClient 我們經常用來進行 HTTP 服務訪問。我們的項目中會有一個獲取任務執行狀態的功能使用 HttpClient,一秒鐘請求一次,經常會出現 Conection Reset 異常。經過分析發現,問題是出在 HttpClient 的每次請求都會新建一個連接,當創建連接的頻率比關閉連接的頻率大的時候,就會導致系統中產生大量處于 TIME_CLOSED 狀態的連接,這個時候使用連接池復用連接就能解決這個問題。

線程池介紹

線程池是線程使用的一種模式,它將線程和任務的概念分離開,使用線程來執行任務,并提供統一的線程管理和任務管理的實現方法,避免了頻繁創建和銷毀線程所帶來的性能開銷。

線程池優點分析

線程池相比于線程來說,它不需要頻繁的創建和銷毀線程,線程一旦創建之后,默認情況下就會一直保持在線程池中,等到有任務來了,再用這些已有的線程來執行任務,如下圖所示:

優點1:復用線程,降低資源消耗

線程在創建時要開辟虛擬機棧、本地方法棧、程序計數器等私有線程的內存空間,而銷毀時又要回收這些私有空間資源,如下圖所示: 而線程池創建了線程之后就會放在線程池中,因此線程池相比于線程來說,第一個優點就是可以復用線程、減低系統資源的消耗。

優點2:提高響應速度

線程池是復用已有線程來執行任務的,而線程是在有任務時才新建的,所以相比于線程來說,線程池能夠更快的響應任務和執行任務。

優點3:管控線程數和任務數

線程池提供了更多的管理功能,這里管理功能主要體現在以下兩個方面:

  1. 控制最大并發數:線程池可以創建固定的線程數,從而避免了無限創建線程的問題。當線程創建過多時,會導致系統執行變慢,因為 CPU 核數是一定的、能同時處理的任務數也是一定的,而線程過多時就會造成線程惡意爭搶和線程頻繁切換的問題,從而導致程序執行變慢,所以合適的線程數才是高性能運行的關鍵。
  2. 控制任務最大數:如果任務無限多,而內存又不足的情況下,就會導致程序執行報錯,而線程池可以控制最大任務數,當任務超過一定數量之后,就會采用拒絕策略來處理多出的任務,從而保證了系統可以健康的運行。

優點4:更多增強功能

線程池相比于線程來說提供了更多的功能,比如定時執行和周期執行等功能。

總結

池化技術指的是提前準備一些資源,在需要時可以重復使用這些預先準備的資源。池化技術的優點主要有兩個:提前準備和重復利用。線程池是池化技術的典型場景,線程池的優點主要有 4 點:

  1. 復用線程,降低了資源消耗;
  2. 提高響應速度;
  3. 提供了管理線程數和任務數的能力;
  4. 更多增強功能。
責任編輯:姜華 來源: Java面試真題解析
相關推薦

2022-03-21 07:40:08

線程池Executors方式

2022-01-24 07:01:20

安全多線程版本

2024-11-11 00:00:01

線程池工具

2023-09-27 23:03:01

Java虛擬線程

2024-07-15 08:20:24

2022-03-23 08:51:21

線程池Java面試題

2022-03-14 07:32:06

線程池拒絕策略自定義

2022-07-25 07:07:35

TCP客戶端服務器

2022-03-28 08:31:29

線程池定時任務

2022-07-27 07:36:01

TCP可靠性

2022-03-16 07:33:40

守護線程用戶線程語言

2019-11-13 14:38:34

Executors阿里線程池

2022-03-07 07:33:16

線程池Java語言

2020-04-29 14:10:44

Java線程池編程語言

2022-07-13 07:06:47

HTTPSHTTP協議

2023-12-20 14:35:37

Java虛擬線程

2022-05-30 07:34:33

三范式Java

2019-12-30 15:30:13

連接池請求PHP

2022-09-20 22:27:08

事務失效public 修飾

2022-03-30 08:54:21

線程 Thread判斷線程池任務Java
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品视频一区二区三区四蜜臂 | 激情一区二区三区 | 亚洲综合精品 | 成人福利电影 | 在线日韩精品视频 | 国产一区二区免费 | 亚洲精品免费视频 | 天天插天天操 | 成人亚洲视频 | 亚洲二区视频 | 国产1区 | 欧美一区2区三区4区公司 | 久久久.com| 91在线视频观看 | 国产精品久久久久久福利一牛影视 | 国产日韩欧美 | 91中文字幕在线观看 | 精品国产一区二区三区日日嗨 | 波多野结衣av中文字幕 | 久久久激情 | 国产成人精品一区二区 | 国产精品99视频 | 日韩av看片 | 国产成人久久av免费高清密臂 | 久久er99热精品一区二区 | 亚洲永久入口 | 97成人精品 | 久久久久国产精品一区二区 | 一区二区三区电影在线观看 | 一区二区三区播放 | 亚洲欧美日韩一区 | 色综合一区二区 | 色综合天天综合网国产成人网 | 欧美成人h版在线观看 | 男女深夜网站 | 国产玖玖| 欧美一级免费 | 欧美日韩免费在线 | 久草中文在线观看 | 亚洲狠狠爱一区二区三区 | 成人精品福利 |