gpt4 book ai didi

c# - IHttpHandler : Speeding up performance with parallelism?

转载 作者:太空宇宙 更新时间:2023-11-03 18:42:02 26 4
gpt4 key购买 nike

我有一个执行三个方法的 IHttpHandler:

  • a = 方法_A
  • b = 方法_B
  • c = Method_C(a,b)

方法A和方法B的计算是完全独立的。方法 C 使用方法 A 和 B 的结果。目前这些方法是按顺序执行的。为了获得更好的 IHttpHandler 整体性能,我的想法是并行计算方法 A 和 B。如果 A 和 B 已完成,则应启动方法 C。这可能吗?如何实现?

问候,托尔斯滕

最佳答案

当然有可能;不过,真正有趣的是弄清楚它是否明智。如果工作受 CPU 限制,那么对于少量请求它会扩展(例如,它在只有你的本地机器上看起来不错) - 但是,如果有很多请求其他并行请求,那么您实际上可能会降低性能(线程有开销,并且您的内核有限)。

如果您的请求数量较少(即您有足够的核心来并行处理负载而不会耗尽),或者如果工作主要是 IO 绑定(bind),那么您应该没问题。

只需为其中一项启动任务:

var task = new Task<ResultType>(() => Method_B());
task.Start();
var a = Method_A();
var b = task.Result;
Method_C(a, b);

请注意,这确实引入了一些相关问题 - 例如,Method_B() 中的代码将无法直接访问任何与请求相关的上下文。理想情况下,收集 Method_B() 需要的所有信息首先(在主要的 http 请求线程上),并通过与http上下文。同样,任何使用线程本地数据(例如 TransactionScope)的东西都不会自动流入 Method_B()

关于c# - IHttpHandler : Speeding up performance with parallelism?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7872292/

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