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