說resin特別,還主要是由於它的效能出眾,即使在很多企業級應用中也能派上用場。resin的資料庫連線池做的很不錯,效率非常高。不過這裡我們討論它的執行緒池,看看有何特別之處。
resin的threadpool位於com.caucho.util.threadpool中,不過這個類的命名有點蹊蹺,更恰當的命名是 threadpoolitem,因為它確實只是乙個普通的thread。那執行緒排程何管理在**呢?也在這個類中,不過都是以靜態函式方式提供的,所以這 個類起到了兩重作用:執行緒池排程和worker執行緒。也由於這種原因,resin例項中只有乙個執行緒池,不像tomcat和jetty可以同時執行多個線 程池,不過對於乙個系統而言,乙個執行緒池足夠了。
和其他執行緒池實現方式不同的是,resin採用鍊錶儲存執行緒。如果有請求時,就將head移走並喚醒該執行緒;待執行完成後,該執行緒就變成空閒狀態並且被添 加到鍊錶的head部分。另外,每乙個執行緒執行時都要判斷當前空閒執行緒數是否超過_minsparethreads,如果超過了,該執行緒就會退出(狀態變 成dead),也從鍊錶中刪除。
resin如何使用該threadpool?所有需要用執行緒池的地方,只需呼叫threadpool. schedule(runnable)即可。該方法就是乙個靜態函式,顧名思義,就是將runnable加到threadpool中待執行。
resin使用的還是傳統方法:監聽執行緒(com.caucho.server.port.port),系統中可以有多個port例項,前提埠號不同, 比如有80和8080埠;另外就是worker執行緒,其實就是threadpool中的空閒執行緒。port本身是乙個thread,在啟動時,會在 threadpool中執行5個執行緒——tcpconnection同時等待使用者請求,當有使用者請求時,其中的乙個會處理。其他繼續等待。當處理使用者請求 完成後,還可以重用這些tcpconnection,這與jetty的有所不同,jetty是當有使用者請求時,才建立連線,處理完成後也不會重用這些連 接,效率會稍差一些。
另外resin有兩個後台執行執行緒:threadlauncher和schedulethread,前者負責當空閒執行緒小於最小空閒執行緒時建立新的執行緒; 而後者則負責執行實際的runnable。我覺得有的負責,沒有必要用乙個執行緒來建立新執行緒,多此一舉。不過schedulethread是必須的,因為 它就是worker執行緒。
c 執行緒池實現(四)執行緒池實現
前面已經說到了同步佇列的實現,下面來看執行緒池的實現。ifndef include threadpool define include threadpool include include include include include syncqueue.hpp namespace mythrea...
執行緒池簡介
本文 這裡 什麼是執行緒池?諸如web伺服器 資料庫伺服器 檔案伺服器和郵件伺服器等許多伺服器應用都面向處理來自某些遠端 的大量短小的任務。構建伺服器應用程式的乙個過於簡單的模型是 每當乙個請求到達就建立乙個新的服務物件,然後在新的服務物件中為請求服務。但當有大量請求併發訪問時,伺服器不斷的建立和銷...
Tomcat執行緒池配置
使用執行緒池,用較少的執行緒處理較多的訪問,可以提高tomcat處理請求的能力。使用方式 首先,開啟 conf server.xml,增加 最大執行緒500 一般伺服器足以 最小空閒執行緒數20,執行緒最大空閒時間60秒。然後,修改節點,增加executor屬性,如 maxthreads 600 m...