WCF 是否使用 ThreadPool 为 PerCall 服务创建新实例?

2023-12-19

对于限制设置为高的 PerCall WCF 服务(例如,最大并发调用 200 个),WCF 是否会启动一个新实例并在线程池线程上调用请求?

如果是,那么这对允许的并发调用总数有影响吗?

我之所以这么问,是因为我似乎从未达到在服务限制配置中设置的最大并发调用数,而是达到了该数字的一小部分 - 在 100 MaxConcurrentCalls 设置中最多为 50 个,在 200 MaxConcurrentCalls 设置中最多为 160 个。

Thanks,


看来 WCF 使用 CLR ThreadPool 中的托管 I/O 线程来服务请求,但需要注意的是使用其自己的线程调度程序。

From 董文龙的博客 - 为什么WCF响应慢并且SetMinThreads不起作用? https://learn.microsoft.com/en-us/archive/blogs/wenlong/why-are-wcf-responses-slow-and-setminthreads-does-not-work

首先,WCF 使用托管 I/O 线程来处理请求。 CLR ThreadPool 可以防止一定数量的空闲 I/O 线程被破坏。当需要更多 I/O 线程时,它们由 ThreadPool 创建,这有点昂贵。

From 董文龙的博客:WCF 请求限制和服务器可扩展性 https://learn.microsoft.com/en-us/archive/blogs/wenlong/wcf-request-throttling-and-server-scalability

在 .NET 3.0 和 3.5 中,您会在 IIS 托管的 WCF 服务中观察到一种特殊行为。每当有请求到来时,系统都会使用两个线程来处理该请求:一个线程是 CLR ThreadPool 线程,它是来自 ASP.NET 的工作线程。另一个线程是由WCF IOThreadScheduler管理的I/O线程(实际上是由ThreadPool.UnsafeQueueNativeOverlapped创建的).

有大量设置会影响 WCF 吞吐量。由于 WCF 使用托管 ThreadPool,因此 ThreadPool 的 MinIOThreads 和 MaxIOThreads 设置将影响结果。从 ThreadPool 中取出所有空闲 I/O 线程(或工作线程,如果您使用这些线程)后,ThreadPool 将延迟一段时间,然后再启动新线程来服务排队的请求。通过增加 MinIOThreads,您可以防止这种延迟。如果您达到 MaxIOThread 限制,那肯定会限制您看到的并发请求数量;但是,在您的 50/100 测试中情况似乎并非如此,因为您的下一个测试成功运行了 160 个并发请求。如果我没记错的话,我相信您使用的托管环境(IIS、WAS、self)可以决定一些 ThreadPool 设置。另外,如果您阅读第二个链接中的博客文章,您将看到当 WCF 在其单独的 I/O 线程上处理请求时,IIS 工作线程如何被阻止。因此在这种情况下,工作线程设置和 IIS 设置会对 WCF 并发性产生影响。你们如何托管这项服务?

您的标题提到了 PerCall InstanceContextMode ,这将使 ConcurrencyMode 变得无关紧要。但是,对于 PerCall,您需要了解 MaxConcurrentInstances 设置以及 MaxConcurrentCalls。根据您的绑定,您可能还需要关注 MaxConcurrentSessions 属性。您使用什么绑定来托管此服务?

不管上述情况如何,令人困惑的是 50/100 测试之后的 160/200 测试。

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

WCF 是否使用 ThreadPool 为 PerCall 服务创建新实例? 的相关文章

  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 我们可以使用 x86_64 CPU 原子在 PCI Express 上生成复合原子操作吗?

    如您所知 从2 0版本开始 PCI Express支持复合原子操作 FetchAdd Swap CAS https pcisig com sites default files specification documents ECN Ato
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐