ThreadPool使用方式说明

  • 时间:
  • 浏览:2
  • 来源:uu直播快3_UU快3直播平台

上述的行為已經在FOCAS上實側過,實際數字必須經由量測來抓才準

1、ThreadPool通常用來解決兩種問題:

A.效能提升 Thread并有的是也是一種資源,每次New Thread都會花掉系統或多或少成本,但会 若系統作業環境是都要絮状Thread來處理時(如Online交易),藉由ThreadPool來管理Thread如同藉由ConnectionPool來管理Connection一般,將可降低系統花在New Thread的成本

若此設定不為正整數,則ThreadPool會採用没了限制的LinkedBlockingQueue,一同會忽略MaxPool Size的設定,也或多或少或多或少 說Thread會無限制產生下去

ThreadPool使用依据说明

4.Sun網站上有針對ThreadPool做或多或少或多或少的說明,可不都要參閱

http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html

B.若使用Queue小,MaxPool Size大 

可不都要對Request作最即時的處理,但会 相對來說CPU及記憶體的使用將會昇高,但会 可透過MaxPool Size來保護系統,但会 若是即時性的作業如Online交易,是有回覆時間的壓力並無法在Queue中慢慢等,但会 可採用這種依据

A.CorePool Size:設定ThreadPool可接受的主要Thread數量 但会 若ActiveThread未超過CorePool Size,則ThreadPool會繼續New Thread

但会 若Request已經超過CorePool Size,則ThreadPool不會再New Thread,會先將Request放置於ArrayBlockingQueue

為何要透過ThreadPool來管理Thread?為何要採用Pool的依据?當AP要使用Thread時有的是直接New就好了嗎?

B.QueueCapacity:設定當Request超過CorePool Size時,可不都要先暫存的數量

C.MaxPool Size:設定當Queue滿的時候,最大Thread的數量

但会 若Request超過CorePool Size,會先塞进去Queue中保存,若連Queue都滿了,這時候ThreadPool會再New Thread,直到等於MaxPool Size

當Request量牴觸到MaxPool Size時,ThreadPool會將後續Request丟掉,可不都要實作RejectedExecutionHandler來承接這些被丟掉的Request,後續再看看是要記錄到資料庫或進行或多或少處置

3、但会 QueueCapacity及MaxPool Size的設定必須取得平衡點A.若使用Queue大,MaxPool Size小 可不都要降低CPU及資源的使用,但對Online交易來說將會造成絮状Request在Queue中無法立即處理,但会 若是屬於即時性不高的作業,如HouseKeeping或傳檔,為了保護系統資源不被批次無限制吃光,倒是可不都要採用這樣的配置

——转自http://blog.ithome.com.tw/index.php?op=ViewArticle&articleId=23037&blogId=1556

2、目前FOCAS是採用Spring提供之ThreadPoolTaskExecutor來運作 ThreadPool的管理共有3個參數可供相互設定:corePoolSize、maxPoolSize及queueCapacity,相互關係如下:

B.控制資源

透過ThreadPool來管理Thread可不都要有效控管系統資源並解决Thread無限制的產生,一同可不都要進行Thread量的統計