【发布时间】:2011-06-30 06:21:44
【问题描述】:
我有一个相当简单的 WCF 服务。大多数服务调用在 300 毫秒或更短的时间内执行。这些调用的负载将相当轻。
一旦“报告”电话是一个长时间运行(10 到 15 分钟)的电话。它与 IO 的 CPU 绑定仅在调用的前几毫秒和最后几毫秒内发生。这些报告调用应该是连续的。
在“报告”调用期间,我想轮询服务的进度。我曾希望简单地设置两个 ServiceHost... 一个使用 ConcurrencyMode.Single 用于长时间运行的报告,一个使用 ConcurrencyMode.Multiple 用于轮询。
但是,一旦“报告”调用运行(系统 CPU 接近 100%),轮询状态调用就永远不会进入服务。我曾希望 OS CPU 调度程序能让新请求拥有一块 CPU,但事实并非如此。
我读过另一个 SO 问题,即 .NET 线程池在 CPU 负载较重的情况下可能不会产生新线程。 “报告”调用发送到第 3 方 DLL,因此我没有明显的方法来限制该进程。
关于如何让轮询调用与长期运行的“报告”调用并行处理的任何想法?
(我正在使用 netTcpBinding。)
【问题讨论】:
标签: c# wcf threadpool