亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

線程池參數(shù)設(shè)置(線程池參數(shù)設(shè)置技巧)

1. 線程池參數(shù)設(shè)置技巧

也就是說(shuō),一個(gè)用戶登陸應(yīng)用系統(tǒng)進(jìn)行某操作,則WebLogic將從weblogic.kernel.default中分配一個(gè)線程給該用戶。默認(rèn)情況下,這個(gè)參數(shù)值是40。比如對(duì)大的企業(yè)應(yīng)用,同一時(shí)間登陸操作系統(tǒng)的用戶非常多,則40個(gè)線程就顯得太少了

2. 線程池的七個(gè)參數(shù)配置

注意點(diǎn)

1.創(chuàng)建線程是存在開銷的,注意創(chuàng)建開銷對(duì)性能損耗

2.大量的線程由于上下文切換造成程序的性能的降低

3.耗時(shí)的業(yè)務(wù)操作放在子線程,防止主線程阻塞

4.注意多線程帶來(lái)的各種數(shù)據(jù)安全問(wèn)題

5.防止多線程在資源競(jìng)爭(zhēng)的過(guò)程中出現(xiàn)死鎖

6.使用線程池維護(hù)線程需要注意構(gòu)造器參數(shù)的配置,比如核心線程數(shù),拒絕策略

希望我的回答對(duì)你有所幫助

3. 如何設(shè)置線程池參數(shù)比較合理

一、線程池的作用:

線程池作用就是限制系統(tǒng)中執(zhí)行線程的數(shù)量。

根據(jù)系統(tǒng)的環(huán)境情況,可以自動(dòng)或手動(dòng)設(shè)置線程數(shù)量,達(dá)到運(yùn)行的最佳效果;少了浪費(fèi)了系統(tǒng)資源,多了造成系統(tǒng)擁擠效率不高。用線程池控制線程數(shù)量,其他線程排隊(duì)等候。一個(gè)任務(wù)執(zhí)行完畢,再?gòu)年?duì)列的中取最前面的任務(wù)開始執(zhí)行。若隊(duì)列中沒(méi)有等待進(jìn)程,線程池的這一資源處于等待。當(dāng)一個(gè)新任務(wù)需要運(yùn)行時(shí),如果線程池中有等待的工作線程,就可以開始運(yùn)行了;否則進(jìn)入等待隊(duì)列。

二、如何使用:

要配置一個(gè)線程池是比較復(fù)雜的,尤其是對(duì)于線程池的原理不是很清楚的情況下,很有可能配置的線程池不是較優(yōu)的,因此在Executors類里面提供了一些靜態(tài)工廠,生成一些常用的線程池。

1. newSingleThreadExecutor創(chuàng)建一個(gè)單線程的線程池。這個(gè)線程池只有一個(gè)線程在工作,也就是相當(dāng)于單線程串行執(zhí)行所有任務(wù)。如果這個(gè)唯一的線程因?yàn)楫惓=Y(jié)束,那么會(huì)有一個(gè)新的線程來(lái)替代它。此線程池保證所有任務(wù)的執(zhí)行順序按照任務(wù)的提交順序執(zhí)行。

2.newFixedThreadPool創(chuàng)建固定大小的線程池。每次提交一個(gè)任務(wù)就創(chuàng)建一個(gè)線程,直到線程達(dá)到線程池的最大大小。線程池的大小一旦達(dá)到最大值就會(huì)保持不變,如果某個(gè)線程因?yàn)閳?zhí)行異常而結(jié)束,那么線程池會(huì)補(bǔ)充一個(gè)新線程。

3. newCachedThreadPool創(chuàng)建一個(gè)可緩存的線程池。如果線程池的大小超過(guò)了處理任務(wù)所需要的線程,那么就會(huì)回收部分空閑(60秒不執(zhí)行任務(wù))的線程,當(dāng)任務(wù)數(shù)增加時(shí),此線程池又可以智能的添加新線程來(lái)處理任務(wù)。此線程池不會(huì)對(duì)線程池大小做限制,線程池大小完全依賴于操作系統(tǒng)(或者說(shuō)JVm)能夠創(chuàng)建的最大線程大小。4.newScheduledThreadPool創(chuàng)建一個(gè)大小無(wú)限的線程池。此線程池支持定時(shí)以及周期性執(zhí)行任務(wù)的需求。

三、為什么要用線程池:

1.減少了創(chuàng)建和銷毀線程的次數(shù),每個(gè)工作線程都可以被重復(fù)利用,可執(zhí)行多個(gè)任務(wù)。2.可以根據(jù)系統(tǒng)的承受能力,調(diào)整線程池中工作線線程的數(shù)目,防止因?yàn)橄倪^(guò)多的內(nèi)存,而把服務(wù)器累趴下(每個(gè)線程需要大約1MB內(nèi)存,線程開的越多,消耗的內(nèi)存也就越大,最后死機(jī))。

Java里面線程池的頂級(jí)接口是Executor,但是嚴(yán)格意義上講Executor并不是一個(gè)線程池,而只是一個(gè)執(zhí)行線程的工具。真正的線程池接口是ExecutorService。

4. 線程池線程數(shù)設(shè)置

1、多進(jìn)程模型的優(yōu)缺點(diǎn)

(1)優(yōu)點(diǎn):

1)每個(gè)進(jìn)程互相獨(dú)立,不影響主程序的穩(wěn)定性,子進(jìn)程崩潰沒(méi)關(guān)系;

2)通過(guò)增加CPU,就可以容易擴(kuò)充性能;

3)可以盡量減少線程加鎖/解鎖的影響,極大提高性能,就算是線程運(yùn)行的模塊算法效率低也沒(méi)關(guān)系;

4)每個(gè)子進(jìn)程都有2GB地址空間和相關(guān)資源,總體能夠達(dá)到的性能上限非常大。

(2)缺點(diǎn):

1)邏輯控制復(fù)雜,需要和主程序交互;

2)需要跨進(jìn)程邊界,如果有大數(shù)據(jù)量傳送,就不太好,適合小數(shù)據(jù)量傳送、密集運(yùn)算 ;

3)多進(jìn)程調(diào)度開銷比較大。

2、多線程模型的優(yōu)缺點(diǎn)

(1)優(yōu)點(diǎn):

1)無(wú)需跨進(jìn)程邊界;

2)程序邏輯和控制方式簡(jiǎn)單;

3)所有線程可以直接共享內(nèi)存和變量等;

4)線程方式消耗的總資源比進(jìn)程方式好;

(2)缺點(diǎn):

1)每個(gè)線程與主程序共用地址空間,受限于2GB地址空間;

2)線程之間的同步和加鎖控制比較麻煩;

3)一個(gè)線程的崩潰可能影響到整個(gè)程序的穩(wěn)定性;

4)到達(dá)一定的線程數(shù)程度后,即使再增加CPU也無(wú)法提高性能,

5)線程能夠提高的總性能有限,而且線程多了之后,線程本身的調(diào)度也是一個(gè)麻煩事兒,需要消耗較多的CPU 。

3、I/O多路復(fù)用的優(yōu)缺點(diǎn)

(1)優(yōu)點(diǎn):

1)相比于多線程和多進(jìn)程,I/O多路復(fù)用是在單一進(jìn)程的上下文中的,當(dāng)有多個(gè)并發(fā)連接請(qǐng)求時(shí),多線程或者多進(jìn)程模型需要為每個(gè)連接創(chuàng)建一個(gè)線程或者進(jìn)程,而這些進(jìn)程或者線程中大部分是被阻塞起來(lái)的。由于CPU的核數(shù)一般都不大,比如4個(gè)核要跑1000個(gè)線程,那么每個(gè)線程的時(shí)間槽非常短,而線程切換非常頻繁。這樣是有問(wèn)題的。而使用I/O多路復(fù)用時(shí),處理多個(gè)連接只需要1個(gè)線程監(jiān)控就緒狀態(tài),對(duì)就緒的每個(gè)連接開一個(gè)線程處理(由線程池支持)就可以了,這樣需要的線程數(shù)大大減少,減少了內(nèi)存開銷和上下文切換的CPU開銷。

2)整個(gè)過(guò)程只在調(diào)用select、poll、epoll這些調(diào)用的時(shí)候才會(huì)阻塞,收發(fā)客戶消息是不會(huì)阻塞的,整個(gè)進(jìn)程或者線程就被充分利用起來(lái),這就是事件驅(qū)動(dòng)。

(2)缺點(diǎn):

單線程模型不能有阻塞,一旦發(fā)生任何阻塞(包括計(jì)算機(jī)計(jì)算延遲)都會(huì)使得這個(gè)模型不如多線程。另外,單線程模型不能很好的利用多核cpu。

5. 線程池參數(shù)如何設(shè)置

多線程是為了能夠讓計(jì)算機(jī)資源合理的分配,對(duì)于處理不同的任務(wù)創(chuàng)建不同的線程進(jìn)行處理,但是計(jì)算機(jī)創(chuàng)建一個(gè)線程或者銷毀一個(gè)線程所花費(fèi)的也是比較昂貴的,有時(shí)候需要同時(shí)處理的事情比較多,就需要我們頻繁的進(jìn)行線程的創(chuàng)建和銷毀,這樣花費(fèi)的時(shí)間也是比較多的。為了解決這一問(wèn)題,我們就可以引用線程池的概念。

所謂線程池就是將線程集中管理起來(lái),當(dāng)需要線程的時(shí)候,可以從線程池中獲取空閑的線程,這樣可以減少線程的頻繁創(chuàng)建與銷毀,節(jié)省很大的時(shí)間和減少很多不必要的操作。

在java中提供了ThreadPoolExecutor類來(lái)進(jìn)行線程的管理,這個(gè)類繼承于AbstractExecutorService,而AbstractExecutorService實(shí)現(xiàn)了ExecutorService接口,我們可以使用ThreadPoolExecutor來(lái)進(jìn)行線程池的創(chuàng)建。

在ThreadPoolExecutor的構(gòu)造方法中,有多個(gè)參數(shù),可以配置不同的參數(shù)來(lái)進(jìn)行優(yōu)化。這個(gè)類的源碼構(gòu)造方法為:

public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)其中每個(gè)參數(shù)代表的意義分別為:

corePoolSize : 線程池中的核心線程數(shù)量,當(dāng)線程池中當(dāng)前的線程數(shù)小于這個(gè)配置的時(shí)候,如果有一個(gè)新的任務(wù)到來(lái),即使線程池中還存在空閑狀態(tài)的線程,程序也會(huì)繼續(xù)創(chuàng)建一個(gè)新的線程放進(jìn)線程池當(dāng)中

maximumPoolSize: 線程池中的線程最大數(shù)量

keepAliveTime:當(dāng)線程池中的線程數(shù)量大于配置的核心線程數(shù)量(corePoolSize)的時(shí)候,如果當(dāng)前有空閑的線程,則當(dāng)這個(gè)空閑線程可以存在的時(shí)間,如果在keepAliveTime這個(gè)時(shí)間點(diǎn)內(nèi)沒(méi)有新的任務(wù)使用這個(gè)線程,那么這個(gè)線程將會(huì)結(jié)束,核心線程不會(huì)結(jié)束,但是如果配置了allowCoreThreadTimeOut = true,則當(dāng)空閑時(shí)間超過(guò)keepAliveTime之后,線程也會(huì)被結(jié)束調(diào),默認(rèn)allowCoreThreadTimeOut = false,即表示默認(rèn)情況下,核心線程會(huì)一直存在于線程池當(dāng)中。

unit : 空閑線程保持連接時(shí)間(keepAliveTime)的時(shí)間單位

workQueue:阻塞的任務(wù)隊(duì)列,用來(lái)保存等待需要執(zhí)行的任務(wù)。

threadFactory :線程工廠,可以根據(jù)自己的需求去創(chuàng)建線程的對(duì)象,設(shè)置線程的名稱,優(yōu)先級(jí)等屬性信息。

handler:當(dāng)線程池中存在的線程數(shù)超過(guò)設(shè)置的最大值之后,新的任務(wù)就會(huì)被拒絕,可以自己定義一個(gè)拒絕的策略,當(dāng)新任務(wù)被拒絕之后,就會(huì)使用hander方法進(jìn)行處理。

在java中也提供了Executors工具類,在這個(gè)工具類中提供了多個(gè)創(chuàng)建線程池的靜態(tài)方法,其中包含newCachedThreadPool、newFixedThreadPool、newScheduledThreadPool、newSingleThreadExecutor等。但是他們每個(gè)方法都是創(chuàng)建了ThreadPoolExecutor對(duì)象,不同的是,每個(gè)對(duì)象的初始 參數(shù)值不一樣;

6. 線程池的基本參數(shù)

當(dāng)某一個(gè)資源使用完后,資源池把相關(guān)的資源的忙標(biāo)示清除掉,以示該資源可以再被下一個(gè)請(qǐng)求使用。

1.資源池引入的目的

提高性能

2.資源池運(yùn)作機(jī)制

由資源池管理器提供一定數(shù)目的目標(biāo)資源,當(dāng)有請(qǐng)求該資源時(shí),資源池分配給一個(gè),然后給該資源標(biāo)識(shí)為忙, 標(biāo) 示為忙的資源不能再被分配使用,

3.資源池常有的參數(shù)

1.初始資源的數(shù)目:資源池啟動(dòng)時(shí),一次建立的資源數(shù)目,資源池最少要保證在這個(gè)數(shù)目上

2.最大資源的數(shù)目:當(dāng)請(qǐng)求的資源超出這個(gè)數(shù)目,就等待

4.常見的資源池

1.數(shù)據(jù)庫(kù)連接池

2.web容器中的request,response對(duì)象池

3.web容器中的線程池

4.C語(yǔ)言內(nèi)存池

7. java線程池參數(shù)設(shè)置

Jdk中的juc并發(fā)包下面包含Java線程池相關(guān)的類,有四種線程池,支持設(shè)置核心線程數(shù),最大線程數(shù),等待隊(duì)列和拒絕策略。

其中核心線程處理完任務(wù)后線程的run方法并沒(méi)有立刻結(jié)束,而是阻塞并不停嘗試從隊(duì)列中取任務(wù)來(lái)處理。

8. 線程池運(yùn)行流程,參數(shù),策略

c# threadpool和線程池其實(shí)是一樣的,前者是后者的英文名,沒(méi)區(qū)別

分享到:
標(biāo)簽:線程 參數(shù)設(shè)置 技巧
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定