为什么 ASP.NET Core 的 ServicePointManager.DefaultConnectionLimit 默认设置为 10?

Jim*_*Aho 6 performance asp.net-core

乍一看,在编写 ASP.NET Core 3.1 应用程序时,人们可能会认为只要您能够处理所有传入请求,就会同时向其他 API 等发出一堆传出请求(假设您的 API 正在处理大量请求)当然是传出 API 调用)。

我想知道这一点,因为当我阅读有关实际进行了多少次调用的文档时,我偶然发现了 ServicePointManager 及其 property DefaultConnectionLimit。根据文档,默认值似乎是 10 :

ServicePoint 对象允许的最大并发连接数。对于 ASP.NET 托管应用程序,默认连接限制为 10 个;对于所有其他应用程序,默认连接限制为 2 个。

例如,即使您每秒处理 1k 个传入请求,在任何给定时间,传出请求的数量ServicePointManager也不会超过 10 个。这就是我不明白的地方——这怎么可能很好地扩展?我天真的想法是,当然,.NET Core 本身并不限制传出请求的数量,并且您的 API 是否会通过破坏请求来耗尽其他 API,这将取决于您,但显然这永远不会发生在 .NET Core 之外。框,因为默认情况下禁止这样做。HttpClientHttpClientServicePointManager

我见过“建议”在启动时调用的示例ServicePointManager.DefaultConnectionLimit = int.MaxValue

但为什么它首先设置为 10 这么低的值呢?设置为合理吗int.MaxValue