线程池并发服务器
什么是線程池?
線程池是一個抽象概念,可以簡單的認為若干線程在一起運行,線程不退出,等待有任務處理。為什么要有線程池?
(1)以網絡編程服務器端為例,作為服務器端支持高并發,可以有多個客戶端連接,發出請求,對于多個請求我們每次都去建立線程,這樣線程會創建很多,而且線程執行完銷毀也會有很大的系統開銷,使用上效率很低。
(2)之前文章的線程例子中,我們也知道創建線程并非多多益善,所以我們的思路是提前創建好若干個線程,不退出,等待任務的產生,去接收任務處理后等待下一個任務。
線程池如何實現?
需要思考2個問題。
(1)假設線程池創建了,線程們如何去協調接收任務并且處理?
(2)線程池上的線程如何能夠執行不同的請求任務?
上述問題1就很像我們之前文章提過的生產者和消費者模型,客戶端對應生產者,服務器端這邊的線程池對應消費者,需要借助互斥鎖和條件變量來搞定。
問題2解決思路就是利用回調機制,我們同樣可以借助結構體的方式,對任務進行封裝,比如任務的數據和任務處理回調都封裝在結構體上,這樣線程池的工作線程拿到任務的同時,也知道該如何執行了。
總結