kestrel vs async await c#

Posted

技术标签:

【中文标题】kestrel vs async await c#【英文标题】: 【发布时间】:2018-10-09 19:20:20 【问题描述】:

在各种技术博客/网站上都指出,使用 asp.net 内核引入的新 Web 服务器 kestrel 比 IIS 具有性能优势,因为它使用基于单线程事件循环模型的 libuv 库。

如果我在 C# 中对 I/O 任务使用异步等待并使用 IIS 而不是 Kestrel,我无法理解这有何不同。由于异步等待也是一个非阻塞调用,所以我无法理解吞吐量/性能优势。

请有人用简单的话详细说明一下。

我知道 kestrel 是跨平台的,但我的查询是围绕我应该使用 kestrel 获得的性能/吞吐量优势,所以如果我只针对 Windows,让我重新表述我的问题,使用 kestrel 与 IIS 是否可以获得任何性能优势.我浏览过的大多数链接都表明 Kestrel 使用 libuv,因此它提供了一些性能优势,但没有详细说明它的不同之处,这使得它更快。如果我不使用任何 IIS 模块,那么性能是否具有可比性

【问题讨论】:

听起来像是***.com/questions/40948857/…的副本 @WiktorZychla 哇,这个帖子太棒了 【参考方案1】:

是否使用 async / await keywoeds 与使用 IIS 或 Kestrel 无关。

IIS 只能在 Microsoft Windows 操作系统上运行 - 通常是 Windows Server,但例如 Windows 10 也可以运行 IIS。

Kestrel 是一个跨平台的 Web 服务器,可能托管在 IIS / Apache / 等后面,具体取决于服务器操作系统。

有关 IIS 和 Kestrel 以及跨平台机会的更深入解释,请参阅ASP.Net Core Web Servers,有关 async / await 的更详细解释,请尝试using async / await。

【讨论】:

嗨,Jay,感谢您抽出时间回复我的问题。我知道红隼是跨平台的,但我的查询是围绕我应该使用红隼获得的性能/吞吐量优势,所以如果我只针对 Windows,让我重新表述我的问题,使用红隼与 IIS 是否可以获得任何性能优势。我浏览过的大多数链接都表明 Kestrel 使用 libuv,因此它提供了一些性能优势,但没有详细说明它的不同之处,这使得它更快。如果我不使用任何 IIS 模块,那么性能是否具有可比性 @saurabhvats - 使用 edit 链接将此添加到您的问题中。 嗨@saurabhvats - 第一个链接是指同时使用IIS 和Kestrel 的建议。 IIS 非常擅长它的工作,“微软建议总是在 Kestrel 前面使用另一个 Web 服务器来处理公共网站。” SSL 证书、日志记录、请求过滤等都在 IIS 的“盒子中”——如果您只是自托管(并非所有 ISP 都允许该选项),您也必须处理这些任务。虽然可行,但 IIS 已经可以了。基本上,这不是一个非此即彼的方案 - 两者兼而有之,为自己节省大量工作!

以上是关于kestrel vs async await c#的主要内容,如果未能解决你的问题,请参考以下文章

c# await 不能作用于 async上?

callback vs async.js vs promise vs async / await

python 3.5 中的 async/await 关键字是不是受到 C# 中的 async/await 的启发? [关闭]

C# 中的Async 和 Await 的用法详解

javascript Promise vs Async&Await

javascript [JS] Promise VS Async / Await