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