到底是什麼面試題, 讓一個工作了4年的精神小伙,只是去參加了一場技術面試, 就被搞得精神萎靡。鬱郁寡歡! 這一切的背後到底是道德的淪喪,還是人性的扭曲。 讓我們一起揭秘一下這道面試題。 關於, “簡述你對線程池的理解”,看看普通人和高手的回答。 普通人: 嗯。。。。。。。。。。 高手: 關於這個問題 ...
到底是什麼面試題,
讓一個工作了4年的精神小伙,只是去參加了一場技術面試,
就被搞得精神萎靡。鬱郁寡歡!
這一切的背後到底是道德的淪喪,還是人性的扭曲。
讓我們一起揭秘一下這道面試題。
關於, “簡述你對線程池的理解”,看看普通人和高手的回答。
普通人:
嗯。。。。。。。。。。
高手:
關於這個問題,我會從幾個方面來回答。
首先,線程池本質上是一種池化技術,而池化技術是一種資源復用的思想,比較常見的有連接池、記憶體池、對象池。
而線程池裡面復用的是線程資源,它的核心設計目標,我認為有兩個:
-
減少線程的頻繁創建和銷毀帶來的性能開銷,因為線程創建會涉及到CPU上下文切換、記憶體分配等工作。
-
線程池本身會有參數來控制線程創建的數量,這樣就可以避免無休止的創建線程帶來的資源利用率過高的問題,
起到了資源保護的作用。
其次,我簡單說一下線程池裡面的線程復用技術。因為線程本身並不是一個受控的技術,也就是說線程的生命周期時由任務運行的狀態決定的,無法人為控制。
所以為了實現線程的復用,線程池裡面用到了阻塞隊列,簡單來說就是線程池裡面的工作線程處於一直運行狀態,它會從阻塞隊列中去獲取待執行的任務,一旦隊列空了,那這個工作線程就會被阻塞,直到下次有新的任務進來。
也就是說,工作線程是根據任務的情況實現阻塞和喚醒,從而達到線程復用的目的。
最後,線程池裡面的資源限制,是通過幾個關鍵參數來控制的,分別是核心線程數、最大線程數。
核心線程數表示預設長期存在的工作線程,而最大線程數是根據任務的情況動態創建的線程,主要是提高阻塞隊列中任務的
處理效率。
以上就是我對這個問題的理解!
總結
我當時在閱讀線程池的源碼的時候,被裡面的各種設計思想驚艷到了。
比如動態擴容和縮容的思想、線程的復用思想、以及線程回收的方法等等。
我發現越是簡單的東西,反而越不簡單。
更多的面試資料和麵試技巧,可以私信我獲取。
版權聲明:本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自
Mic帶你學架構
!
如果本篇文章對您有幫助,還請幫忙點個關註和贊,您的堅持是我不斷創作的動力。歡迎關註「跟著Mic學架構」公眾號公眾號獲取更多技術乾貨!