自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

線程數(shù)量怎么設(shè)置才最合理

開發(fā) 前端
在程序開發(fā)中,常常為了提高性能,我們使用多線程進(jìn)行開發(fā),而針對多線程常常使用線程池來處理,線程池可以帶來很多好處,有興趣的可以看看之前干貨君寫的文章:線程池ThreadPool看完這篇就夠了

 在程序開發(fā)中,常常為了提高性能,我們使用多線程進(jìn)行開發(fā),而針對多線程常常使用線程池來處理,線程池可以帶來很多好處,有興趣的可以看看之前干貨君寫的文章:線程池ThreadPool看完這篇就夠了

 

[[357346]] 

 

那么現(xiàn)在有個問題來了,在應(yīng)用中,針對多線程開發(fā),線程數(shù)量我們要怎么設(shè)置才最合理呢?是不是越多越好?

當(dāng)然不是,在多線程中,不得不提的上下文切換

上下文切換

首先在單核CPU中,也是可以處理多線程的,只是CPU通過給每個線程分配CPU時間片來處理的,假設(shè)我們有A、B兩個線程執(zhí)行任務(wù),CPU在非常短的時間(時間片)執(zhí)行A線程,然后再執(zhí)行B線程,如此往復(fù)執(zhí)行,不停的切換(切換時保持之前的狀態(tài)),由于時間片的間隙非常短,讓我們感覺是同時執(zhí)行的,即多線程,而這種切換就叫上下文切換。

從上面的描述我們可以知道,上下文切換,必然會出現(xiàn)之前的狀態(tài)保持和啟動,必然會導(dǎo)致性能的損耗,因此多線程的數(shù)量多就不一定快,也就說明了線程數(shù)量不是越多越好。

那么怎么合理的設(shè)置線程數(shù)量呢?

多線程任務(wù)分類

通常針對多線程一般分為兩類場景:

IO密集型:IO密集型通常指程序運(yùn)行期間,大部分的耗時是用來進(jìn)行I/O操作,而這個時間線程不會占用CPU來處理。

CPU密集型:CPU密集型通常是指系統(tǒng)運(yùn)行時會消耗掉大量的CPU資源,例如需要大量的計(jì)算,一些復(fù)雜運(yùn)算,邏輯處理之類的。

因此針對不同場景線程的數(shù)量設(shè)置也不一樣

I/O密集型

由于系統(tǒng)運(yùn)行大部分都是在進(jìn)行I/O交互,并不會暫用cpu資源,因此可以提高線程數(shù),對線程數(shù)可以用以下計(jì)算公式:

最佳線程數(shù) = ((線程等待時間+線程CPU時間)/線程CPU時間 )* CPU核心數(shù)

這樣假設(shè)線程無等待,最佳線程數(shù) = 1 * CPU核心數(shù),而實(shí)際上線程一般都會存在等待時間,可以保守認(rèn)為等待時間和線程CPU時間一樣,即 2 * CPU核心數(shù),因此一般都設(shè)置為

最佳線程數(shù) = CPU核心數(shù) * 2

CPU密集型

對于CPU密集型的,絕大部分都是利用cpu資源進(jìn)行計(jì)算,因此一般對于此類場景,最佳線程數(shù)量設(shè)置為CPU核心線程數(shù)+1,以充分利用多核心CPU的處理能力。

最佳線程數(shù) = CPU核心數(shù) + 1

java獲取cpu核心數(shù)的方法如下:

Runtime.getRuntime().availableProcessors()

 

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2020-06-30 11:36:45

錯誤碼合理開發(fā)

2023-08-01 12:45:39

用戶細(xì)分消費(fèi)習(xí)慣

2022-12-27 09:57:41

線程數(shù)CPU

2022-04-24 08:23:19

Redis內(nèi)存淘汰策略

2021-06-05 06:00:20

微軟Windows 10Windows

2015-08-20 10:19:08

數(shù)據(jù)中心

2019-09-26 10:19:27

設(shè)計(jì)電腦Java

2018-04-23 14:33:31

筆記本接口布局

2024-07-26 10:42:30

2012-10-17 09:50:47

HBase

2013-03-11 10:04:16

維護(hù)局域網(wǎng)設(shè)置交換機(jī)交換機(jī)設(shè)備

2010-01-04 12:53:33

交換機(jī)端口設(shè)置

2021-11-02 12:33:11

UWB定位技術(shù)網(wǎng)絡(luò)技術(shù)

2022-12-07 10:56:23

線程池監(jiān)控執(zhí)行超時

2021-09-23 15:55:50

線程池語言公式

2011-08-08 09:10:09

2018-07-19 05:13:38

2017-09-17 19:43:10

BIOSwindows硬盤

2018-06-29 11:08:45

數(shù)據(jù)

2009-09-28 08:52:29

Windows 7自動加速自動播放
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號