gpt4 book ai didi

c# - WCF 多进程处理/设计

转载 作者:行者123 更新时间:2023-11-30 18:28:26 24 4
gpt4 key购买 nike

我目前正处于优化我们基于 WCF 的服务之一的设计阶段。该服务为一组非线程安全的库提供包装器 API。 API 也需要相当长的时间才能完成(平均 0.5 秒)。单次批处理运行可能会发生数十万次调用。

当前端点导致令人失望的 12-15% CPU 利用率(8 核),这大概是因为只有一个线程来服务调用。这些库不是线程安全的,唯一的解决方案似乎是创建多个进程,每个进程公开一个端点。

我们必须保留“原始”端点,以便客户端界面相同:

Client Thread --> +---------+   +-----------------+ <--> Worker Process 1
Client Thread --> | Service |-->| "Worker Process | <--> Worker Process 2
Client Thread --> | API | | Manager" | <--> Worker Process 3
Client Thread --> +---------+ +-----------------+ <--> Worker Process 4

这是我目前的想法:

  1. 原始端点会将调用转发给“工作进程管理器”
  2. 这个“管理器”将有一个线程池,线程池依次调用每个工作进程。该调用是阻塞调用。
  3. 每个工作进程公开一个(几乎)彼此相同的端点。 (可能通过命名管道)。
  4. 原始服务 API 将更改为每次调用实例上下文(现在是单个)。

这可能是一个常见的场景,所以我想知道在这种情况下 WCF 的最佳实践是什么?如果不是(不太可能),在我们的限制条件下实现最佳性能的最佳方法是什么?

最佳答案

The current endpoint results in disappointing 12-15% CPU utilization (8-core) presumably because there is only one thread to service a call.

只需明确这一点:WCF 很容易使所有 CPU 饱和。此限制由您的代码强加。


您提出的建议将会奏效。也就是说,您可以为该 IIS 应用程序池打开 Web Garden 模式。然后 IIS 将产生多个进程并向它们分发请求。希望这个请求分布足以让您让它发挥作用。如果还不够,请考虑让 IIS 产生比 CPU 更多的工作进程。

This may be a common scenario

我第一次听说或在 Stack Overflow 上看到它。很稀少。基本上,您必须在此处解决设计错误的 API。

关于c# - WCF 多进程处理/设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25005201/

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