您可以强制 Parallel.Invoke 使用多线程吗?

2023-12-02

我在 .aspx 页面中使用这样的任务并行库:

 Parallel.Invoke(
                new Action[]
                    {
                        () => { users= service.DoAbc(); },
                        () => { products= service.DoDef(); }
                    });

以前,我每次调用都会触发一个线程,并且比现在使用 Parallel.Invoke 时的响应速度更快。

我应该假设 TPL 库会做最好的事情,还是有办法让我调整它,以便它实际上并行调用?

我想这取决于我的网站运行的硬件类型,我认为它是虚拟机。

我的每个调用都会发出一个 http 请求来从 API 调用中获取结果。


Parallel.Invoke 将并行运行您的方法,除非这比顺序运行它们更昂贵,或者线程池中没有可用的线程。这是一种优化,而不是问题。在正常情况下,您不应该尝试对框架进行事后猜测,而应该让它完成其工作。

如果您想调用一些长时间运行的 IO 绑定方法,您应该考虑覆盖此行为。 Parallel.Invoke 使用默认的 TaskScheduler,它使用与核心数量相同的线程(不确定有多少个)以避免 CPU 过载。如果您的操作只是等待某些 IO 或网络调用完成,那么这不是问题。

您可以使用 Parallel.Invoke(ParallelOptions,Action[])] 指定最大线程数1覆盖。您还可以使用并行选项类来传递取消令牌或指定自定义任务计划程序,例如允许您使用比默认计划程序更多的线程。

您可以像这样重写您的代码:

Parallel.Invoke(
            new ParallelOptions{MaxDegreeOfParallelism=30},
            new Action[]
                {
                    () => { users= service.DoAbc(); },
                    () => { products= service.DoDef(); }
                });

不过,除非发现实际的性能问题,否则不应尝试修改默认选项。您最终可能会过度使用 CPU 并导致延迟或抖动。

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

您可以强制 Parallel.Invoke 使用多线程吗? 的相关文章

随机推荐

  • 将 System.Drawing.Bitmap 缩放到给定大小,同时保持纵横比

    我想扩展一个System Drawing Bitmap至少小于某个固定的宽度和高度 这是为了在网站上生成图片库的缩略图 所以我想保持纵横比相同 我有一些解决方案 但似乎没有一个真正能满足我的需要 它们围绕基于保持宽度或高度相同但不改变两者的
  • 模拟按键 C#

    I want to simulate F5 key press in my C program When IE is open I want to be able refresh my website automatically 我怎样才能
  • Java 中的动态泛型类型

    如果我有一个使用泛型类型的类 例如 public class Record
  • 谷歌地图 API 从 v2 升级到 v3,建议

    我在我的网络应用程序中完全集成了谷歌地图版本 2 具有获取方向 集群标记 选项卡式信息窗口 上下文菜单 右键单击 等功能 该实现的设计非常糟糕 导致了一些问题 所以现在我需要修改核心实现以更好的设计 我正在考虑升级到 google 地图 A
  • 不区分大小写的列表搜索

    我有一个清单testList包含一堆字符串 我想添加一个新字符串到testList仅当列表中尚不存在时 因此 我需要对列表进行不区分大小写的搜索并使其高效 我不能使用Contains因为这没有考虑外壳 我也不想用ToUpper ToLowe
  • Symfony2 表单中的数据对象与需要填写的内容不完全匹配

    我们有监控服务 我们的监控单元可以监视某些机器 我正在创建一个表单来在 Symfony2 中注册一台新机器 所以我们有机器实体 id 机器名称 显示器编号 And the 监控实体 id 序列号 对于新机器 客户需要填写form with
  • Internet Explorer 显然不支持 MouseEvent movingX 属性

    我正在开发一个需要兼容 IE 9 及以上版本的应用程序 我在 MouseEvent 对象上使用 movingX 属性 但是该 MouseEvent 对象在 Internet Explorer 9 或 11 中没有 movingX 属性 我浏
  • 如何使用php在mysql中生成下一个自动递增编号?

    我试图使用 php 获取 mysql 中的下一个自动递增数字 我尝试了这样的方法 但是 当删除任何行时 这不起作用 我希望你明白我的意思 我怎样才能使用 php 来做到这一点 您无法执行此操作来获取表数据 您必须使用 php 获取表状态才能
  • 为什么Python 2.7的namedtuple实现__dict__?

    The namedtuplePython 2 7 中的实现实现 dict 我很困惑这是在做什么 为什么我们需要做一个特别的 dict 如果已经定义了属性 C tmp gt python Python 2 7 12 Anaconda 4 1
  • 从 Python 数据中学习二元决策图 (BDD)

    是否可以从数据中学习二元决策图 BDD 以机器学习的方式 如果是这样 怎么办 背景 我在 Python 中看到过一些工具可以完成此任务 例如决策树 DT scikit学习 但我还没有看到任何 BDD 举个例子 我想做的事情如下 前三列对应于
  • 在 SQL Server 中读取并递增 int 值

    我需要使用 C 在 SQL Server 2008 中自动读取并递增一个值 例如 我必须插入 批次 的项目 为此我需要最后一批的编号 并确保没有其他人获得该编号 因此 我有一张仅包含最后批号的表格 并找到一种只需一步即可获取和更新编号的方法
  • 使用ClassLoader方法检索类下的所有资源作为输入流

    我的问题是一个你可能认为很常见的问题 但到目前为止我还没有找到解决方案 在 Tomcat 5 5 下构建 Java Web 应用程序 尽管要求它可以部署在任何地方 例如在 WebLogic 环境下 因此需要将资源作为流加载 良好的实践表明资
  • 为什么 System.Transactions TransactionScope 默认隔离级别可序列化

    我只是想知道什么是好的使用可序列化的原因作为创建时的默认隔离级别系统 交易 交易范围 因为我想不出任何 而且似乎你无法通过更改默认值web app config所以你总是必须在你的代码中设置它 using var transaction T
  • WCF,从服务访问 Windows 窗体控件

    我有一个托管在 Windows 窗体内的 WCF 服务 如何从我的服务中的方法访问表单的控件 例如我有 public interface IService ServiceContract string PrintMessage string
  • Gwt 插件在 Chrome 42 中不起作用 [重复]

    这个问题在这里已经有答案了 新版chrome 42 不支持gwt插件在 Windows 8 1 上 即使我将兼容模式更改为 Windows 7 我仍然会收到再次下载插件的提示 我已尝试删除它并重新安装 但仍然收到此消息 有任何想法吗 来自
  • 这段Python代码能更高效吗?

    我编写了一些代码来查找字符串中有多少个子串是字谜对 要查找的函数anagram anagramSolution 复杂度为 O N substring函数的复杂度小于N平方 但是 这里的代码是有问题的 能不能再优化一点 for i in ra
  • 填充颜​​色动画在动画中调用块时闪烁确实停止了

    我无法弄清楚为什么动画块完成后动画从 fromValue 闪烁到 toValue 我知道 完成动画后 您必须将 CALayer 的值设置为动画的结束状态 以保持其外观一致 然而 无论我以什么顺序调用这些方法 我都会得到闪烁的结果 我正在做的
  • Android,如何为视图组设置动画监听器?

    我有一个充当菜单的图像视图 当用户单击它时 视图组 包括其他 5 个图像视图 将从左向右滑动 当用户再次单击菜单时 查看组幻灯片从右到左 我可以模拟这种行为 但从右向左滑动后 我希望看不到视图组 但视图组将放在其位置上 我尝试使用Linea
  • 如何在 Xcode 中启用 Clang Address Sanitizer?

    正如 WWDC 2015 上宣布的那样 Clang Address Sanitizer 将被引入 Xcode 和 OS X 课程 413 高级调试和地址清理器 如何为 Xcode 项目启用 Clang Address Sanitizer A
  • 您可以强制 Parallel.Invoke 使用多线程吗?

    我在 aspx 页面中使用这样的任务并行库 Parallel Invoke new Action gt users service DoAbc gt products service DoDef 以前 我每次调用都会触发一个线程 并且比现在