按顺序拆分 Parallel.Foreach 循环上的负载

2024-01-11

我需要处理列表中的一百万个元素。
将它们粗暴地扔进并行.ForEach只会让CPU饱和。
相反,我将元素主列表分成几部分,并将子列表放入并行循环中。

List<Element> MasterList = new List<Element>();
Populate(MasterList); // puts a Million elements into list;

//Split Master List into 100 Lists of 10.0000 elements each
List<List<Element>> ListOfSubLists = Split(MasterList,100);

foreach (List<Element> EL in ListOfSubLists )
{
   Parallel.ForEach(EL, E =>
   {
     // Do Stuff
   }

  //wait for all parallel iterations to end before continuing   
}    

在继续上循环的下一次迭代之前等待所有并行迭代结束的最佳方法是什么?

Edit :
正如一些答案所述,“使CPU饱和”并不是一个准确的表达。
其实我只是想限制CPU的使用,避免这个处理给CPU带来过多的负载。


Parallel.ForEach不会使CPU饱和;它使用一些智能来决定同时运行多少个并行线程,最多 63 个。

See: Parallel.ForEach 是否限制活动线程的数量? https://stackoverflow.com/questions/1114317/does-parallel-foreach-limits-the-number-of-active-threads

如果需要,您还可以通过提供一个来设置最大并行度ParallelOptions like new ParallelOptions { MaxDegreeOfParallelism = 5 }作为第二个参数Parallel.ForEach.

作为最后一点,Parallel.ForEach阻塞直到所有迭代完成。因此,您编写的代码可以正常工作。您无需等待迭代完成。

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

按顺序拆分 Parallel.Foreach 循环上的负载 的相关文章

随机推荐

  • sed 无法在 bash 脚本中工作

    我已经搜索了几个小时来寻找这个问题的答案 这似乎简单得令人沮丧 我有一个 bash 脚本 我对其进行了简化 以找到阻止其工作的行 并留下 bin bash sed i e s n g usb lenny rss tmp rss tmp 如果
  • 在 Play Framework 视图模板中包含纯 HTML 页面

    有没有办法在 Play 框架的视图模板中包含纯 html 页面 我有一个场景 其中有一个通用视图模板 并且在模板正文中 我想包含某些静态 html 页面 我知道我可以在某个模板中包含其他模板 但我不确定是否可以包含纯 html 页面 一种选
  • 当网格地图中有多个目标时,如何设计A*的启发式?

    我面临一个问题 我必须使用 A 来搜索地图 并且该地图中有多个目标需要达到 我的目标是扩展地图中的最少节点 关于如何设计这个 A 算法的启发式有什么想法吗 谢谢 假设 多个目标 是指您想要实现的目标any one 只需取所有启发式中的最小值
  • 需要discordjs时出错:“找不到模块'node:events'”[重复]

    这个问题在这里已经有答案了 我正在尝试开发一个机器人来表达不同意见 我安装了npm install discord js save图书馆 但是导入的时候却报错 我该如何修复它 命令 node internal modules cjs loa
  • 将鼠标悬停即可开始播放简单的幻灯片

    我正在寻找仅当用户将鼠标悬停在图像上时播放图像幻灯片的最佳方法 当用户将鼠标移到图像之外时幻灯片再次停止 下面的演示完成了我需要的一切 除了悬停功能 Link to demo http snook ca technical fade fad
  • 函数默认模板参数可以放在非默认模板参数之前吗?

    以下代码在 gcc 4 7 1 上编译 struct X template
  • 如何使用设备相机在 iPhone 应用程序中以编程方式拍照?

    在 iPhone 应用程序中 我们可以采取pictures在某些特定的时间间隔以编程方式通过使用iPhone 设备相机 如果是的话请告诉我如何在 iPhone 应用程序中以编程方式拍照 请帮助和建议 Thanks UIImagePicker
  • Python 习语“if __name__ == '__main__'”在 clojure 中的等价物是什么?

    我正在涉足 clojure 并且在尝试确定与这种常见 python 习惯用法等效的 clojure 和 或 Lisp 时遇到了一些麻烦 习惯用法是 在 python 模块的底部通常有一些测试代码 然后是运行该代码的语句 例如 mymodul
  • 片段已添加,对话框片段?

    我有一个显示良好的对话框片段 但有时当我尝试显示它时 我不断收到IllegalStateException 下面是日志猫 java lang IllegalStateException Fragment already added Sele
  • 如何阻止 PHP sleep() 影响我的整个 PHP 代码?

    所以 在我的街机上 howlingdoggames com 我有一个积分系统 每次您访问正在进行游戏的页面时 都会给您一个积分 为了减少滥用 我想进行某种延迟 因此仅在 45 秒后授予 这是我尝试过的 if SESSION lastgame
  • 当没有这样的条件调用时,useEffect Hook 条件调用的 React 错误

    React 正在抱怨下面的代码 说它useEffect有条件地被调用 import React useEffect from react import ReactDOM from react dom function App const d
  • AWS 快照和 AMI 之间的区别

    所以我很难弄清楚这两者之间的具体区别是什么 据我了解 快照只是磁盘驱动器的备份 而 AMI 是整个系统 或者我应该说的实例 的备份 但整个系统在技术上不是完全位于磁盘驱动器上吗 如果是这样的话 那么没有明显的区别 我错过了一些东西吗 有两种
  • 获取 AWS CodeBuild 的 GitHub git 分支

    我将 AWS CodeBuild 设置为从 GitHub 自动构建 其他 CI 服务为分支提供了环境变量 但我找不到适用于 AWS CodeBuild 的环境变量 有一个CODEBUILD SOURCE VERSION设置为pr 7 whe
  • Bash 不会自动完成文件(Tab)

    bash 中的自动完成功能 使用 Tab 适用于文件夹 但是not与文件 我运行的是 Ubuntu 13 10 我还没碰过我的 bashrc file 底部的部分是这样的 bashrc文件看起来 与bash 完成安装和更新的部分 enabl
  • Javascript深度复制对象[重复]

    这个问题在这里已经有答案了 可能的重复 克隆 JavaScript 对象最有效的方法是什么 https stackoverflow com questions 122102 what is the most efficient way to
  • 在 Qt 中显示图像以适合标签大小

    我已经尝试了几种在表单上显示图像的方法 但没有一个能按照我想要的方式工作 我读过很多地方 最简单的方法是创建标签并使用它来显示图像 我有一个标签 其大小由布局指定 但是如果我使用像素图将图像加载到其中 则标签的大小将调整为图像的大小 如果我
  • 如何使用 Boost 库智能指针管理对象生命周期?

    有一个场景我需要使用shared ptr和weak ptr智能指针来解决 两个线程 线程 1 和 2 正在使用名为 A 的共享对象 每个线程都有对该对象的引用 线程 1 决定删除对象 A 但同时线程 2 可能正在使用它 如果我使用share
  • SignalR 连续消息传递

    我有一个网络项目 需要从外部肥皂服务更新网页上的统计信息 日志 我决定采用的方法是使用 signalR 通过使用执行服务方法并将结果返回给所有连接的客户端的代码 该代码将连续执行 在服务调用之间有一定的延迟 我无法将所有部分放在一起 可能是
  • 为什么 Visual Studio Code Git 显示驱动器上的所有更改?

    我在 Macbook 上使用 Visual Studio Code 1 6 0 我发现 VS Code 的 Git 列出了大量更改 甚至是那些不在我的工作文件夹中的更改 当我将鼠标悬停在这些上时 我会得到一个工具提示 该文件位于当前工作区之
  • 按顺序拆分 Parallel.Foreach 循环上的负载

    我需要处理列表中的一百万个元素 将它们粗暴地扔进并行 ForEach只会让CPU饱和 相反 我将元素主列表分成几部分 并将子列表放入并行循环中 List