.NET Framework 4.0可以处理同一端点上的并发请求吗?



我有我的WebMethod:

[WebMethod(true)]
[SoapHeader("Header")]
public string GetStatementNotDownloadedAsync(string uniqueId, string type)

当我发送50个并发请求到这个端点时,它们被一个接一个地处理。

为什么?

这与点击按钮并等待回复没有什么不同。

JavaScript(客户端)是异步的,但是服务器端必须处理来自浏览器会话的每个请求。

你混淆了线程处理和并行处理。它们是非常不同的概念。记住,你可以用一个处理器运行一个web服务器!!

一些开发人员陷入了将多线程等同于并行的陷阱。这是不准确的。你可以在单核机器上使用多线程,但是你只能在多核机器上使用并行。

因此,在大多数情况下,web服务器将为不同的用户使用多个内核(并行处理)。但是,对于ONE用户来说,您实际上只有一个线程模型,如果您想并行运行每个ajax调用,那么您必须编写在服务器上启动新进程线程的代码。(但是返回一个值会相当困难)。

事实上,你的浏览器是一个线程模型。它不能同时做两件事!-但公平地说,浏览器现在可以使用多个核心,但一般来说,浏览器将使用一个CPU,甚至包括当它下载说多个图像显示。

实际发生的是每个"图像请求"顺序发生(每个请求都很小,花费的时间很少)。现在,所有的请求都"完成"了。然后web服务器可以开始推出多个请求,这可以是并行的和线程的,甚至不是并行处理(每个图像流从浏览器得到一些线程处理-当这种情况发生时,它不是并行多CPU处理)。

因此,来自JavaScript的ajax调用是线程化的。发出客户端js代码请求,JavaScript代码继续运行该请求,然后完成其例程和ajax调用。然后ajax返回回调,并返回"success"例程然后调用/run客户端)。

所以web服务器"end point"可以处理多个请求-但那将是来自不同的用户-而不是单个用户-从单个用户,他们排队,并一个接一个地运行。

问题不在于请求!-问题是在每个请求发出后进行工作和处理!-那些在线程模型上运行的,而不是并行模型。

相关内容

  • 没有找到相关文章