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

2024-01-19

我正在为推荐引擎编写代码,该引擎使用并行线程进行计算。运行时,我在 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 全部 1 1000

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

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

猫 /proc/PID/状态

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多线程中cpu没有得到充分利用 的相关文章

随机推荐

  • 如何在 Django 中制作类似于 stackoverflow 的 URL?

    我正在创建一个视频网站 我希望视频的直接网址看起来像 example com watch this is a slug 1 其中 1 是视频 ID 但我不想让蛞蝓变得重要 example com watch this is another
  • MVVM 独特的优势

    stackoverflow 搜索将导致多个包含相似标题的帖子 但这是不同的问题 由于这不是一个讨论网站 我必须问一个不同的问题 使用 MVVM 可以给我带来哪些其他实现无法带来的独特好处 MVC NTiers 或其他任何东西 我并不是真正在
  • C# 如何将 System.Net.ConnectStream 转换为 byte[] (数组)

    我正在尝试将流 System Net ConnectStream 转换为字节数组 关于如何做到这一点的任何想法 示例 Stream sourceStream the ConnectStream byte array using var ms
  • 如何在 REST Assured 中设置请求超时?

    我正在发送带有 REST Assured 的帖子请求 问题是它根本没有超时 就我而言 服务器有时无法访问 这会永远锁定请求 找到了答案 我将其发布在这里 希望对某人有所帮助 RestAssured config RestAssuredCon
  • 用颜色绘制 SKPhysicsBody 的形状

    使用 SpriteKit 创建游戏 效果非常好 我正在使用物理学并且能够看到我的身体实际上在哪里 因为我的精灵里面可能有一些阿尔法 这真的会很有帮助 这也将有助于创建更精确的身体 在 SpriteKit 的文档中 他们讨论了 debugOv
  • 如何将 .Net 日期时间转换为 T-SQL 日期时间

    MyDataSource SelectParameters startDate DefaultValue fromDate SelectedDate Date ToString 如您所见 我正在 Net SqlDataSource 中设置参
  • 从自定义中间件(外部身份提供商)重定向期间未传递登录 ID

    我们希望在身份服务器中有一个外部身份提供商 用户被重定向到登录到此外部身份提供商 Idp 并在那里完成身份验证 外部 Idp 将响应重定向回我们的身份服务器 我们希望在其中根据响应形成用户声明并重定向回调用客户端 我们遵循了答案这个计算器问
  • Oracle 多次更新查询

    我的数据库中有两张如下表所示的表 在每个 DEPARTMENT CODE 的第一个表 ITEM 中 将有多个 ITEM CODE ITEM STORE CODE ITEM CODE DEPARTMENT CODE 011 912003 14
  • 如何在 IntelliJ 中执行外部工具

    我在哪里可以实际启动 IntelliJ 中的外部工具 我知道在哪里设置外部工具 并且我已经完成了 但我看不到在哪里启动它 我没有从 运行 菜单中看到它 也没有从任何右键单击菜单中看到它 您可以使用 JetBrains 的命令行工具支持插件从
  • select/poll 与异步 I/O 的性能

    从性能角度来看 哪一个更好 选择 轮询还是异步 I O 我之前的印象是 select poll 反复向内核请求数据 而异步 I O 则依赖于内核通知数据可用性 但是 我注意到 select poll 也依赖于内核通知 因此 我相信从性能的角
  • 如何在Python中转义撇号等?

    我有一个带有这样的符号的字符串 39 这显然是一个撇号 我尝试了 saxutils unescape 但没有任何运气 并尝试了 urllib unquote 我怎样才能解码这个 谢谢 查看这个问题 https stackoverflow c
  • C#、XML、添加新节点

    我正在尝试向现有 XML 文件添加新节点 我有这个文件 其中包含第一个测试元素
  • 无法访问 Azure Functions 的管理 URL

    我正在使用 powershell 并尝试访问 Azure 函数行政使用 API 我正在尝试获取在 appName 下创建的所有函数的列表 当然 我在调用之前将 appName 更改为实际的 Azure 函数名称 在这次通话之前我也得到了有效
  • Office Dialog API 向子对话框发送消息

    我们希望使用 Dialog API 进行一些更适合更大工作区域的额外操作 我们已经能够通过 API 从对话框中向家长发送消息 Office context ui messageParent 但是我们还希望能够直接向对话框发送消息 例如sen
  • 切换主题后如何保留我的(自定义)IDE 配色方案?

    Delphi Rio comes with two color schemes dark and light I open Tools gt Options gt Editor gt Color and changed the dark c
  • 弹跳球。使其在高峰时减速

    我在 x3d 中创建了一个弹跳球动画 我只是好奇如何让球在其高度的峰值处减速 使其看起来更真实 先感谢您
  • Nodejs 中工作线程如何工作?

    Nodejs 不能像 java 和 net 那样有内置的线程 API 做 如果添加线程 语言本身的性质就会 改变 无法将线程添加为一组新的可用线程 类或函数 Nodejs 10 x 添加了工作线程作为实验 现在从 12 x 开始稳定 我浏览
  • CSS 编辑器,可扩展编辑时的单行声明

    是否有一个 CSS 编辑器可以自动将单行声明扩展为焦点上的多行声明 为了澄清我的想法 请参阅下面的示例 原始CSS div main color orange margin 1em 0 border 1px solid black 但是当关
  • Powershell JSON 操作

    parent Property1 Property1Value Description Generic Description SubProperties SubSubTemplateProps SubSubSubTemplateProps
  • 多线程中cpu没有得到充分利用

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