我被告知在IIS中默认情况下ASP.NET是多线程的.这种线程是如何实现的?
服务器场是否向不同的核心发送不同的请求?
单个请求是否使用多个内核?
更重要的是,如果线程在IIS中更高的位置,那么将线程添加到ASP.NET代码是否有任何优势?
服务器不仅将不同的请求驻留到不同的线程,而且单个请求可以在生命周期的过程中更改线程.这称为线程敏捷性.我正在寻找一篇解释它的好文章......
编辑:还没有确定的文章,但一篇博客文章解释了一些困难.
编辑:评论的更多链接:
ASP.NET线程切换(博客文章)
什么是.NET中的"异步IO操作"?(所以问题;听起来不相关但不是)
ASP.NET和System.Diagnostics跟踪(SO问题)
线程化IIS 6和7之间的差异
ASP.net使用.Net线程池(可配置)每个请求都由线程池中的一个线程接收,直到每个线程都已被占用.然后请求在IIS堆栈上排队,直到这也溢出.从那里新的请求遇到非常丑陋的'服务器不可用'消息.
这是ASP.net网站通常的"多线程"故事.
有许多方法可以确保可伸缩性.最明显的是性能测试并消除代码中的瓶颈.
通过利用任何I/O请求的I/O线程,ASP.net可以真正利用多个内核.它使代码变得丑陋但快速从未变得漂亮.
以下是关于如何执行此操作的权威MSDN MAG帖子
UPDATE
好吧,我可能会尝试回答你的完整问题:
"更重要的是,如果线程在IIS中更高的位置,将线程添加到ASP.Net代码是否有任何优势?"
简短的回答是:这取决于!如果您正在等待长时间运行的进程,那么建议您为请求客户端实现更好的体验(即带外AJAX调用)
如果您有多个需要为请求客户端完成的独立任务:那么您可能最好生成一个新进程来并行运行任务.
如果您的站点获得大量流量,那么您确实需要考虑实现异步模式以更好地利用CPU
IIS自动使用多个核心(尽管您可以选择将其关闭).
将线程添加到ASP.NET代码的优点是,您可以控制自己的应用程序的内部工作,而不是被迫依赖IIS为您做出所有决定.