1. 線程池參數設置技巧
也就是說,一個用戶登陸應用系統進行某操作,則WebLogic將從weblogic.kernel.default中分配一個線程給該用戶。默認情況下,這個參數值是40。比如對大的企業應用,同一時間登陸操作系統的用戶非常多,則40個線程就顯得太少了
2. 線程池的七個參數配置
注意點
1.創建線程是存在開銷的,注意創建開銷對性能損耗
2.大量的線程由于上下文切換造成程序的性能的降低
3.耗時的業務操作放在子線程,防止主線程阻塞
4.注意多線程帶來的各種數據安全問題
5.防止多線程在資源競爭的過程中出現死鎖
6.使用線程池維護線程需要注意構造器參數的配置,比如核心線程數,拒絕策略
希望我的回答對你有所幫助
3. 如何設置線程池參數比較合理
一、線程池的作用:
線程池作用就是限制系統中執行線程的數量。
根據系統的環境情況,可以自動或手動設置線程數量,達到運行的最佳效果;少了浪費了系統資源,多了造成系統擁擠效率不高。用線程池控制線程數量,其他線程排隊等候。一個任務執行完畢,再從隊列的中取最前面的任務開始執行。若隊列中沒有等待進程,線程池的這一資源處于等待。當一個新任務需要運行時,如果線程池中有等待的工作線程,就可以開始運行了;否則進入等待隊列。
二、如何使用:
要配置一個線程池是比較復雜的,尤其是對于線程池的原理不是很清楚的情況下,很有可能配置的線程池不是較優的,因此在Executors類里面提供了一些靜態工廠,生成一些常用的線程池。
1. newSingleThreadExecutor創建一個單線程的線程池。這個線程池只有一個線程在工作,也就是相當于單線程串行執行所有任務。如果這個唯一的線程因為異常結束,那么會有一個新的線程來替代它。此線程池保證所有任務的執行順序按照任務的提交順序執行。
2.newFixedThreadPool創建固定大小的線程池。每次提交一個任務就創建一個線程,直到線程達到線程池的最大大小。線程池的大小一旦達到最大值就會保持不變,如果某個線程因為執行異常而結束,那么線程池會補充一個新線程。
3. newCachedThreadPool創建一個可緩存的線程池。如果線程池的大小超過了處理任務所需要的線程,那么就會回收部分空閑(60秒不執行任務)的線程,當任務數增加時,此線程池又可以智能的添加新線程來處理任務。此線程池不會對線程池大小做限制,線程池大小完全依賴于操作系統(或者說JVm)能夠創建的最大線程大小。4.newScheduledThreadPool創建一個大小無限的線程池。此線程池支持定時以及周期性執行任務的需求。
三、為什么要用線程池:
1.減少了創建和銷毀線程的次數,每個工作線程都可以被重復利用,可執行多個任務。2.可以根據系統的承受能力,調整線程池中工作線線程的數目,防止因為消耗過多的內存,而把服務器累趴下(每個線程需要大約1MB內存,線程開的越多,消耗的內存也就越大,最后死機)。
Java里面線程池的頂級接口是Executor,但是嚴格意義上講Executor并不是一個線程池,而只是一個執行線程的工具。真正的線程池接口是ExecutorService。
4. 線程池線程數設置
1、多進程模型的優缺點
(1)優點:
1)每個進程互相獨立,不影響主程序的穩定性,子進程崩潰沒關系;
2)通過增加CPU,就可以容易擴充性能;
3)可以盡量減少線程加鎖/解鎖的影響,極大提高性能,就算是線程運行的模塊算法效率低也沒關系;
4)每個子進程都有2GB地址空間和相關資源,總體能夠達到的性能上限非常大。
(2)缺點:
1)邏輯控制復雜,需要和主程序交互;
2)需要跨進程邊界,如果有大數據量傳送,就不太好,適合小數據量傳送、密集運算 ;
3)多進程調度開銷比較大。
2、多線程模型的優缺點
(1)優點:
1)無需跨進程邊界;
2)程序邏輯和控制方式簡單;
3)所有線程可以直接共享內存和變量等;
4)線程方式消耗的總資源比進程方式好;
(2)缺點:
1)每個線程與主程序共用地址空間,受限于2GB地址空間;
2)線程之間的同步和加鎖控制比較麻煩;
3)一個線程的崩潰可能影響到整個程序的穩定性;
4)到達一定的線程數程度后,即使再增加CPU也無法提高性能,
5)線程能夠提高的總性能有限,而且線程多了之后,線程本身的調度也是一個麻煩事兒,需要消耗較多的CPU 。
3、I/O多路復用的優缺點
(1)優點:
1)相比于多線程和多進程,I/O多路復用是在單一進程的上下文中的,當有多個并發連接請求時,多線程或者多進程模型需要為每個連接創建一個線程或者進程,而這些進程或者線程中大部分是被阻塞起來的。由于CPU的核數一般都不大,比如4個核要跑1000個線程,那么每個線程的時間槽非常短,而線程切換非常頻繁。這樣是有問題的。而使用I/O多路復用時,處理多個連接只需要1個線程監控就緒狀態,對就緒的每個連接開一個線程處理(由線程池支持)就可以了,這樣需要的線程數大大減少,減少了內存開銷和上下文切換的CPU開銷。
2)整個過程只在調用select、poll、epoll這些調用的時候才會阻塞,收發客戶消息是不會阻塞的,整個進程或者線程就被充分利用起來,這就是事件驅動。
(2)缺點:
單線程模型不能有阻塞,一旦發生任何阻塞(包括計算機計算延遲)都會使得這個模型不如多線程。另外,單線程模型不能很好的利用多核cpu。
5. 線程池參數如何設置
多線程是為了能夠讓計算機資源合理的分配,對于處理不同的任務創建不同的線程進行處理,但是計算機創建一個線程或者銷毀一個線程所花費的也是比較昂貴的,有時候需要同時處理的事情比較多,就需要我們頻繁的進行線程的創建和銷毀,這樣花費的時間也是比較多的。為了解決這一問題,我們就可以引用線程池的概念。
所謂線程池就是將線程集中管理起來,當需要線程的時候,可以從線程池中獲取空閑的線程,這樣可以減少線程的頻繁創建與銷毀,節省很大的時間和減少很多不必要的操作。
在java中提供了ThreadPoolExecutor類來進行線程的管理,這個類繼承于AbstractExecutorService,而AbstractExecutorService實現了ExecutorService接口,我們可以使用ThreadPoolExecutor來進行線程池的創建。
在ThreadPoolExecutor的構造方法中,有多個參數,可以配置不同的參數來進行優化。這個類的源碼構造方法為:
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)其中每個參數代表的意義分別為:
corePoolSize : 線程池中的核心線程數量,當線程池中當前的線程數小于這個配置的時候,如果有一個新的任務到來,即使線程池中還存在空閑狀態的線程,程序也會繼續創建一個新的線程放進線程池當中
maximumPoolSize: 線程池中的線程最大數量
keepAliveTime:當線程池中的線程數量大于配置的核心線程數量(corePoolSize)的時候,如果當前有空閑的線程,則當這個空閑線程可以存在的時間,如果在keepAliveTime這個時間點內沒有新的任務使用這個線程,那么這個線程將會結束,核心線程不會結束,但是如果配置了allowCoreThreadTimeOut = true,則當空閑時間超過keepAliveTime之后,線程也會被結束調,默認allowCoreThreadTimeOut = false,即表示默認情況下,核心線程會一直存在于線程池當中。
unit : 空閑線程保持連接時間(keepAliveTime)的時間單位
workQueue:阻塞的任務隊列,用來保存等待需要執行的任務。
threadFactory :線程工廠,可以根據自己的需求去創建線程的對象,設置線程的名稱,優先級等屬性信息。
handler:當線程池中存在的線程數超過設置的最大值之后,新的任務就會被拒絕,可以自己定義一個拒絕的策略,當新任務被拒絕之后,就會使用hander方法進行處理。
在java中也提供了Executors工具類,在這個工具類中提供了多個創建線程池的靜態方法,其中包含newCachedThreadPool、newFixedThreadPool、newScheduledThreadPool、newSingleThreadExecutor等。但是他們每個方法都是創建了ThreadPoolExecutor對象,不同的是,每個對象的初始 參數值不一樣;
6. 線程池的基本參數
當某一個資源使用完后,資源池把相關的資源的忙標示清除掉,以示該資源可以再被下一個請求使用。
1.資源池引入的目的
提高性能
2.資源池運作機制
由資源池管理器提供一定數目的目標資源,當有請求該資源時,資源池分配給一個,然后給該資源標識為忙, 標 示為忙的資源不能再被分配使用,
3.資源池常有的參數
1.初始資源的數目:資源池啟動時,一次建立的資源數目,資源池最少要保證在這個數目上
2.最大資源的數目:當請求的資源超出這個數目,就等待
4.常見的資源池
1.數據庫連接池
2.web容器中的request,response對象池
3.web容器中的線程池
4.C語言內存池
7. java線程池參數設置
Jdk中的juc并發包下面包含Java線程池相關的類,有四種線程池,支持設置核心線程數,最大線程數,等待隊列和拒絕策略。
其中核心線程處理完任務后線程的run方法并沒有立刻結束,而是阻塞并不停嘗試從隊列中取任務來處理。
8. 線程池運行流程,參數,策略
c# threadpool和線程池其實是一樣的,前者是后者的英文名,沒區別