gpt4 book ai didi

java - 多线程中cpu没有得到充分利用

转载 作者:行者123 更新时间:2023-12-02 12:34:21 24 4
gpt4 key购买 nike

我正在为推荐引擎编写代码,该引擎使用并行线程进行计算。运行时,我在 8 核 CPU 上获得的最大 CPU 使用率为 265-300%(使用 top 命令)。我不明白的是,为什么即使有近 50% 的 cpu 空闲,它也没有充分利用 CPU。使用并行性的伪代码部分是:

getRecoFromCandidates(){
t=new Thread(new KNN(uid,profile,candidates));// does knn using closest neighbors
rec=RecommendationsFromSet(NB_RECOMMENDATIONS,uid,candidatesI,val);// finds recommendations
return rec;
}



RecommendationsFromSet() {
Thread worker = new Thread(new storiesClickProcess(nbRec,candidatesI,likedSet));
worker.start();
threads.add(worker);
}
int running = 0;
do {
running = 0;
for (Thread thread : threads) {
if (thread.isAlive()) {
running++;
}
}
} while (running > 0);

if(val==1){
List<Story> list1 = new ArrayList<Story>();
for(Integer sid: storiesClicks.keySet()){
list1.add(new Story(sid,storiesClicks.get(sid)));
}
Collections.sort(list1,new StoriesList());
for(i=0;i<nbRec;i++){
rec.add(list1.get(i).getSid());
}
}



return rec;
}


parGetClosestNeighbor() {
Thread worker = new Thread(new formNetworkProcess(nbFriends,networkScore[i],profile,candidatesI,candidatesISet) );
worker.start();
threads.add(worker);
}
int running = 0;
do {
running = 0;
for (Thread thread : threads) {
if (thread.isAlive()) {
running++;
}
}
} while (running > 0);

List<Network> list = new ArrayList<Network>();

for(i=0;i<TASK_NUM;i++){
for(Integer sid: networkScore[i].keySet()){
list.add(new Network(sid,networkScore[i].get(sid)));

}
}

Collections.sort(list,new NetworkList());
for(i=0;i<nbFriends;i++){
friends.add(list.get(i).getUid());
}

synchronized(network.get(uid)) {
network.get(uid).clear();
for( i=0;i<friends.size();i++){
network.get(uid).add(friends.get(i));
}

}


return friends;
}

最佳答案

如果您有多核 CPU,top 并不是检查 CPU 使用情况的最佳命令。使用SAR

sar -P ALL 1 1000

这将每 1 秒打印一次所有核心的使用情况,共 1000 次

此外,我确实在您的代码中看到了同步关键字。这可能会引起争议。您可以使用 vmstat 或通过此命令来验证

cat/proc/PID/status

关于java - 多线程中cpu没有得到充分利用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19600561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com