并行何时会提高性能

2024-05-27

我试图理解何时使用parallel会提高性能。
我用一个简单的代码对其进行了测试,该代码运行了超过 100,000 个项目List<Person>并将每一个的名字都改为string.Empty.

并行版本花费的时间是常规版本的两倍。 (是的,我测试了更多的一个核心......)

I saw this https://stackoverflow.com/a/4172729/601179回答说数据切片并不总是并行对性能有好处。
同样,这一警告在并行示例的每一页中都重复出现MSDN http://msdn.microsoft.com/en-us/library/dd460719.aspx教程:

这些示例主要旨在演示用法,并且可能或 可能不会比等效的顺序 LINQ to Objects 运行得更快 查询

我需要一些规则和技巧,什么时候并行会提高我的代码的性能,什么时候不会。
明显的答案是“测试您的代码,如果并行循环更快,则使用它”,这是绝对正确的,但我猜没有人对他编写的每个循环进行性能分析。


想想什么时候值得在现实生活中并行化某些东西。什么时候最好自己坐下来从头到尾自己完成一项工作,什么时候最好雇用二十个人?

  • 这项工作本质上是可并行的还是本质上是串行的?有些工作根本无法并行:九个女人不可能一起工作在一个月内生下一个孩子。有些工作是可以并行的,但结果很糟糕:你可以雇佣二十个人,分配给他们每人五十页的《战争与和平》供你阅读,然后让他们每个人写一篇文章的二十分之一,将所有文章片段粘在一起,然后提交论文;这不太可能取得好成绩。有些工作是非常可并行的:二十个拿着铲子的人挖洞的速度比一个人快得多。

  • 如果工作本质上是可并行的,那么并行化真的能节省时间吗?你可以煮一锅意大利面,里面有一百个面条,也可以煮二十锅意大利面,每个意大利面有五个面条,最后把结果倒在一起。我向你保证,并行烹饪意大利面的任务不会让你更快地吃晚饭。

  • 如果工作本质上是可并行的,并且可能节省时间,那么雇用这些人的成本是否可以弥补节省的时间?如果自己完成工作比雇用其他人更快,那么并行化并不是一种胜利。雇佣二十个人来完成一项需要你五秒钟的工作,并希望他们能在四分之一秒内完成它,如果你需要一天的时间才能找到这些人,那么这并不算节省。

当工作完成时,并行化往往是一个胜利enormous and 可并行化。将十万个指针设置为空是计算机可以在极短的时间内完成的事情;没有巨大的成本,所以没有节省。尝试做一些不平凡的事情;比如说,编写一个编译器并并行对方法体进行语义分析。你在那里获胜的可能性更大。

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

并行何时会提高性能 的相关文章

  • 按成员序列化

    我已经实现了template
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK

随机推荐

  • TypeScript 中的日期时间格式

    我想以 24 小时格式显示时间字符串 并认为在 TypeScript 中这会很容易 但由于某种原因 我无法将 Date toLocaleTimeString 与选项一起使用 知道为什么吗 它们在单独的接口定义中定义 interface Da
  • 如何使用 Cypress 清除多选输入?

    如何使用赛普拉斯清除 取消选择 多选输入中的所有选项 这里的文档似乎没有涵盖这种情况 https docs cypress io api commands select html Syntax https docs cypress io a
  • Core Audio 渲染线程和线程信号

    iOS 是否有任何类型的非常低级别的条件锁 不包括锁定 我正在寻找一种方法来从核心音频渲染线程内向等待线程发出信号 而不使用锁 我想知道是否可能存在像 Mach 系统调用这样的低级内容 现在我有一个核心音频线程 它使用非阻塞线程安全消息队列
  • 如何在flutter中绘制自定义形状

    我正在尝试在我的应用程序中绘制这样的自定义形状 尝试使用自定义画家进行绘制 但尚未弄清楚如何获得这种形状 我认为它实际上只是一个带有自定义边框的容器 但甚至不知道从哪里开始 我感兴趣的只是形式 而不是内容 或者 如果有人知道如何绘制底部较薄
  • javascript应用于构造函数,抛出“格式错误的形式参数”

    感谢精彩的回复这个问题 https stackoverflow com questions 1959040 possible to send javascript varargs我了解如何使用可变参数调用 javascript 函数 现在我
  • MongoDB - 从每个对话中获取最后一条消息?

    我有一个对话集合 id from userA to userB message Hello datetime 我想显示用户对话的预览 当前用户与任何其他用户之间每次对话的最后一条消息 因此 当用户单击某些 最后一条消息 时 他会转到下一页
  • BoneCP 无法从断开的连接中恢复

    我的 BoneCP 0 7 1 RELEASE 有问题 我虽然认为BoneCP getConnection 确保它会在数据库处于活动状态的情况下返回 Connection 对象 这是我配置池的方式 private void setupCon
  • 如何编写 .bat 或 .cmd 文件来从 PATH 中删除元素?

    Related 如何列出批处理文件中路径的元素 https stackoverflow com questions 1424558 FOR 是如何运作的 https stackoverflow com questions 817280 ho
  • 你如何组织你的命名空间?

    所以我有逻辑实体 人 国家等 GUI 元素 控件 数据和导航控制器 管理器 然后是四叉树和计时器之类的东西 我总是努力将这些东西干净地分离到逻辑名称空间中 我通常有这样的事情 利维坦 GUI 控件 Leviathan GUI 视图 利维坦实
  • 汉字编码?

    我有一个用例 我通过发布请求向 spring 控制器提交参数 在控制器中 我正在读取参数并执行一些操作 之后 我将这些参数作为请求参数的一部分发送到其他 URL 在这里我无法处理中文字符 它变得乱码 我现在正在做的行动 1 我将下面的中文文
  • Spring-Social/Twitter -- ConnectController 不响应 /connect?

    好吧 我已经拉了我的头发很长时间了 至少看起来是这样 试图找出我做错了什么 我有一个Java项目 我想允许用户登录 通过正常的Spring 启用安全性 JDBC 的存储库 向我的应用程序授予对其 Twitter 帐户的访问权限 我已经在 T
  • 根据子节点数量动态调整 d3 树布局的大小

    从这个例子来看http mbostock github com d3 talk 20111018 tree html http mbostock github com d3 talk 20111018 tree html我已经建立了一个d3
  • 我如何修复此 php 代码导致的本月最后一天错误?

    下面的代码是我用于网站菜单的代码 它将当前月份页面的链接移动到月份更改时的链接列表的顶部 但在某些月份的 31 号 例如 4 月 这会失败 对于大多数链接 我得到了同一个月的两个链接 我已经阅读了 php 生成日期方式的问题 但不知道如何更
  • Process.Start() 可以考虑系统路径吗?

    我已经对此进行了一段时间的搜索和实验 但我没有运气 我正在尝试制作一个控制台程序来自动执行一些我无法使用 BAT 文件完成的任务 我想从 Windows SDK 调用 signcode exe 该 bin 文件夹包含我的系统路径中的所有工具
  • 具有动态命名参数的 Scala 案例类副本

    对于具有参数数量的 scala 案例类 21 e g case class Car type String brand String door Int 其中类型 吉普车 品牌 丰田 门 4 etc 还有一个复制方法允许使用命名参数覆盖 Ca
  • 检测诚实的网络爬虫

    我想 在服务器端 检测哪些请求来自机器人 我现在并不关心恶意机器人 只关心那些表现良好的机器人 我见过一些方法 主要涉及将用户代理字符串与 bot 等关键字进行匹配 但这似乎很尴尬 不完整且无法维护 那么有人有更可靠的方法吗 如果没有 您是
  • Rails 是否为 rake 任务运行初始化程序?

    当我运行 rake 任务时 是否执行配置 初始化程序中的脚本 如果你的 rake 任务取决于 environment 即 您像这样声明您的任务 task my task gt environment do end
  • (Docker) 如何在 WordPress 容器中使用单独的 Composer 容器安装依赖项?

    Dockerfile FROM wordpress ENV REFRESHED AT 2015 08 12 ADD composer json var www html ADD composer lock var www html inst
  • python - _mysql 无法打开包含文件:'config-win.h':安装 mysql-python 时没有这样的文件或目录

    我试图安装两个名为 mysql python 和 mysqlclient fork of mysql python 的 python 库 然后当我尝试使用 pip 安装它时出现此错误 Collecting mysql python Usin
  • 并行何时会提高性能

    我试图理解何时使用parallel会提高性能 我用一个简单的代码对其进行了测试 该代码运行了超过 100 000 个项目List