【池化】通俗理解池化技術:線程池、連接池

今天和朋友交流,聊到線程,引出了線程池概念,爲了講的通俗易解,路過一棟建築物,就舉了一個例子。

從線程池舉例子,線程主要就是去獲取CPU資源做自己的任務。這時候,我們把主要的內容形象化

形象成具體事物:

  • CPU:房子
  • 資源:房子內部空間
  • 任務:一個人

對應的操作:

  • 創建線程:造門(在房子上建一個門)
  • 銷燬線程:拆門(在房子上把門拆除)

大概的過程是:

如果一個線程獲取資源的過程可以形象成一個人要進去房子。這時候房子上沒有門,那麼這個人就必須自己去造門,進去房子內,當任務結束,出來後要拆掉門。

創建線程和銷燬線程的開銷都是比較高的,就像每次去造門和拆門都是很費力的事情。這時候引入池化技術,節省不必要的開銷,即每次都不需要重新造門和拆除門。

池化技術可以理解成:

  1. 在建造房子(即系統初始化時)時先建立一定量的門;
  2. 這時候,當一個人需要進去房間內(獲取資源),可以選取一個門進去;
  3. 在辦完事後,從這個門再出來,這時候門又可以被其他人使用;
  4. 後來的人亦是同樣的操作;
  5. 最後整個任務結束時,再統一拆除所有的門。

對應線程池過程:

  1. 先建立一個線程池,已經創建一定數量的空閒線程;
  2. 當子任務需要創建一個線程時,直接從線程池中獲取空閒線程(對應選取空閒的門),執行任務;
  3. 任務完成後,將線程歸還到線程池中,重歸空閒;
  4. 其餘任務亦是如此;
  5. 最後整個任務結束後,銷燬所有線程,關閉線程池。

池化技術的優勢:

如果沒有線程池時,隨意創建線程,當達到一定量的線程時,整個主機負載過重,直接宕機;
即可理解爲,無限的人都自己造門進入了房間,最後整個房間被撐爆了,都辦不了事了。
這時候,用線程池時,只能讓先來的任務獲取到線程,完成任務後,再退出讓後面的任務獲取線程;即,先來的人先進入房間,後來的人在門外等待(有點像蹲坑,總得先等人出來再進去),當裏面有人出來後,後來等待的人才能進入。

這樣,有了限制後,保證了不會被撐爆,主機就不會宕機。

最後有個情況,就是如果等的人太多了也是一個問題。所以線程池需要對等待的任務隊列也有一個限制。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章