gpt4 book ai didi

c# - Task 是否真的减少了使用的线程数?

转载 作者:太空宇宙 更新时间:2023-11-03 21:45:11 24 4
gpt4 key购买 nike

我正在研究 WCF 网络服务的性能改进。此 Web 服务调用可能需要很长时间(5 秒以上)才能响应的其他 Web 服务。在我们的服务负载很高的情况下,我们可能会遇到所有线程都被使用的情况,因为它们正在等待下游服务响应。这会导致整个系统备份等。

所以我正在研究使用 WCF 异步任务模式是否真的能解决这个问题。我真正的问题是调用下游服务的线程在等待响应时到底发生了什么?该线程是否仍分配给调用,只是在后台工作池或其他东西中?我需要能够证明迁移到异步任务实际上会减少使用的线程数(如果确实如此的话)。

最佳答案

你在这里想要的是将长时间运行的线程返回到线程池并执行所谓的完成以使该线程获取响应......基本上你的目标应该是让线程处理传入的请求到您的服务,然后调用等待已久的外部服务,几乎立即返回线程池以供对您服务的其他请求可用。然后在通知第三方服务响应准备就绪后,它或线程池中的不同线程将被分配来获取响应并处理它。

Task 框架更多地用于并行化,而不是基于线程池的完成/拖尾模式。它产生一个线程来做一些工作,但除非您以相当高级的方式手动干预,否则该线程不会在长时间运行的调用之间返回到池中。您可以改为查看异步模式调用:开始/结束语法。

http://msdn.microsoft.com/en-us/library/ms228963(v=vs.100).aspx

这些方法/完成将在等待响应时将线程释放到池中,这应该释放所述线程以处理更多服务调用。

如果您使用的是 .NET 4.5,则 async/await 关键字是此模式的漂亮包装器,您可以改用它们。

关于c# - Task<T> 是否真的减少了使用的线程数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17410211/

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