日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

如何控制Java多線程分布到不同的CPU核上去?

 

JAVA語言的線程,從規范的角度來說是不強制要求任何具體的實現方式的。采用1:1、N:1、M:N模型都可以。

具體到我們平時常用的JVM實現,Oracle/Sun的HotSpot VM,它是用1:1模型來實現Java線程的,也就是說一個Java線程是直接通過一個OS線程來實現的,中間并沒有額外的間接結構。而且HotSpot VM自己也不干涉線程的調度,全權交給底下的OS去處理。所以如果OS想把某個線程調度到某個CPU/核上,它就自己弄了。

這個意義上說Java程序跑在HotSpot VM上開多個Java線程,就跟一個C/C++程序開了多線程來跑沒有任何兩樣。那么怎么控制這些線程分布到不同的CPU核上去呢?

在linux上的話,可以用taskset來把線程綁在某個指定的核上。在Java層面上,有大大寫了個現成的庫來利用taskset綁核:OpenHFT/Java-Thread-Affinity 有興趣的話可以參考一下。

通過taskset,我們可以更加有效地利用CPU資源。我們可以把一些不太重要的比如copy/備份/同步等工作限定在一顆cpu上,或者是多核的cpu的一顆核心上進行處理,雖然這不一定是最有效的方法,但可以最大程度上利用了有效資源,降低那些不太重要的進程占用cpu資源;

查看系統下cpu信息:

#cat /proc/cpuinfo

taskset就可以幫我們完成這項工作,而且操作非常簡單;

該工具系統默認安裝,rpm包名util-linux

#taskset --help

taskset (util-linux 2.13-pre7)

usage: taskset [options] [mask | cpu-list] [pid | cmd [args...]]

set or get the affinity of a process

-p, –pid operate on existing given pid

-c, –cpu-list display and specify cpus in list format

-h, –help display this help

-v, –version output version information

舉例:

1、開啟一個只用0標記的cpu核心的新進程(job.sh是你的工作腳本)

#taskset -c 0 sh job.sh

2、查找現有的進程號,調整該進程cpu核心使用情況(23328舉例用的進程號)

#taskset -pc 0 23328

pid 23328's current affinity list: 0-3 #0-3表示使用所有4核進行處理

pid 23328's new affinity list: 0 #調整后改為僅適用0標記單核處理

3、可在top中進行負載check

最后你可以在你的工作腳本中加入該指令來合理利用現有的cpu資源;

分享到:
標簽:多線程 Java
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定