c# - IIS 和单线程应用程序
问题描述
我想知道托管在 IIS 中的单线程 .NET 应用程序中的请求/响应模型。例如,如果它是一个 WebAPI 应用程序,它是单线程读取一个大文件,处理它(对内容进行一些字符串操作)并在 API 响应中返回已处理的内容,为了论证,我们假设它需要处理文件需要 10 分钟。
现在,我在这里读到 ASP.NET IIS 映射是多线程的:
那么如果我在一分钟内向同一个 API 发出 20 个请求会发生什么?
- 来电者#2等等会发生什么?等待 10 分钟,然后 IIS 才会启动它?
- IIS 在哪里跟踪传入的请求?
解决方案
默认情况下,IIS 会同时处理请求。如果您不主动采取任何措施来阻止它,那么如果 2 个请求同时到达,您将开始在 2 个线程上同时处理同一个文件。
lock(...)
如果不需要并发处理,您可以使用其中一种同步原语,例如或互斥锁。然而; 如果处理需要 10 分钟,您确定要将其作为 Web 请求的一部分吗?可能有更好的选择。
推荐阅读
- ruby-on-rails - 在 Rails 中,# frozen_string_literal: true 指令与 StripParams 冲突
- vba - 将新电子邮件导出到文件
- angular - pdf.save 不是 Angular 6 中使用的 jspdf 中的函数错误
- sql-server - 存储过程错误:消息 512,级别 16,状态 1,过程 sp_ActFTC,第 64 行子查询返回超过 1 个值
- java - 活动类中的getArguments()?
- ubuntu - 无法在 ubuntu 14.04 LTS 上升级乘客
- wcf - WCF -“未能查找通道以接收传入消息。找不到端点或 SOAP 操作。” 但仅来自一位客户
- angular - TypeError:未定义不是对象(评估“parentOutlet.peekState”)
- java - 运行 javafx 应用程序时在后台播放 mp3 文件
- spring-amqp - Spring AMQP 有没有办法设置所有虚拟机的最大消费者数量?