ASP.NET多线程如何?

Cra*_*ren 24 asp.net iis multithreading

我被告知在IIS中默认情况下ASP.NET是多线程的.这种线程是如何实现的?

服务器场是否向不同的核心发送不同的请求?

单个请求是否使用多个内核?

更重要的是,如果线程在IIS中更高的位置,那么将线程添加到ASP.NET代码是否有任何优势?

Jon*_*eet 24

服务器不仅将不同的请求驻留到不同的线程,而且单个请求可以在生命周期的过程中更改线程.这称为线程敏捷性.我正在寻找一篇解释它的好文章......

编辑:还没有确定的文章,但一篇博客文章解释了一些困难.

编辑:评论的更多链接:


And*_*rry 9

ASP.net使用.Net线程池(可配置)每个请求都由线程池中的一个线程接收,直到每个线程都已被占用.然后请求在IIS堆栈上排队,直到这也溢出.从那里新的请求遇到非常丑陋的'服务器不可用'消息.

这是ASP.net网站通常的"多线程"故事.

有许多方法可以确保可伸缩性.最明显的是性能测试并消除代码中的瓶颈.

通过利用任何I/O请求的I/O线程,ASP.net可以真正利用多个内核.它使代码变得丑陋但快速从未变得漂亮.

以下是关于如何执行此操作的权威MSDN MAG帖子

UPDATE

好吧,我可能会尝试回答你的完整问题:

"更重要的是,如果线程在IIS中更高的位置,将线程添加到ASP.Net代码是否有任何优势?"

简短的回答是:这取决于!如果您正在等待长时间运行的进程,那么建议您为请求客户端实现更好的体验(即带外AJAX调用)

如果您有多个需要为请求客户端完成的独立任务:那么您可能最好生成一个新进程来并行运行任务.

如果您的站点获得大量流量,那么您确实需要考虑实现异步模式以更好地利用CPU


The*_*TXI 5

IIS自动使用多个核心(尽管您可以选择将其关闭).

将线程添加到ASP.NET代码的优点是,您可以控制自己的应用程序的内部工作,而不是被迫依赖IIS为您做出所有决定.