首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在IIS上运行的Thread.Run应用程序中调用ASP.Net

在IIS上运行的Thread.Run应用程序中调用ASP.Net
EN

Stack Overflow用户
提问于 2016-02-12 10:59:44
回答 2查看 740关注 0票数 3

考虑在IIS上运行在ASP.Net web应用程序中的下列代码.

代码语言:javascript
运行
复制
_thread = new Thread(Method1)
_thread.Start();

由于ASP.Net进程中有一个线程池,这段代码的效果如何?特别是..。

  1. 它会从ASP.Net线程池中取出另一个线程吗?还是来自不同的线程池?还是这段代码绕过线程池,只得到一个新线程?
  2. 这是同一个线程池,用于服务页面请求吗?因此,这段用于提高性能的代码实际上可以通过使用另一个线程向另一个用户提供另一个资源来减少它?
  3. 线程池是否仅用于服务非静态资源?IIS是否有自己的线程池,用于服务未通过托管管道运行的资源?
  4. 如果应用程序。在调用_thread.Start()之后,池被回收了?IIS是否允许在关闭应用程序池之前完成此线程?
  5. 这段代码似乎强制创建了一个新线程。交换此代码以使用异步/等待会有好处吗?在Method1()中运行的代码是IO绑定的。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-12 11:29:18

  1. 当您显式调用new Thread时,该线程不是线程池的一部分。你完全靠自己了。
  2. 所谓的ASP.NET线程池纯粹用于处理请求消息(托管HttpApplication派生对象)。
  3. 静态文件由IIS本地提供,因此ASP.NET线程池仅用于ASP.NET内容。但是在这里,您应该注意到在辅助进程(w3wp.exe)中发生的所有事情。只有一些是由本机组件处理的,而另一些是由托管组件处理的。如果使用集成管道模式,则管道是统一的。
  4. 应用程序池循环仅等待处理请求。当完成所有请求时,您自己的线程将被杀死。
  5. 异步/等待不会自动创建线程。但是,通过切换到异步/等待,您确实避免了创建线程,这将有助于提高性能。
票数 3
EN

Stack Overflow用户

发布于 2016-02-13 01:46:28

ASP.NET 4.5+ (您可以在其中使用async-await)使用相同的线程池来处理请求并通过Task.Run调度任务执行。

当您在处理一个Task.Run请求时使用ASP.NET时,您将将上下文更改为一个新的线程池线程,并将当前线程池线程返回给线程池。当任务完成时,您将切换回另一个线程池线程。

使用Task.Run处理ASP.NET请求至少需要多一个线程池线程,并且至少需要两个上下文开关。

底线是,它需要更多的资源,需要更多的时间来处理请求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35360895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档