gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 12:46:02 25 4
gpt4 key购买 nike

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

_thread = new Thread(Method1)
_thread.Start();

由于 ASP.Net 进程中有一个线程池,这段代码的作用是什么?具体...

  1. 它会从 ASP.Net 线程池中获取另一个线程吗?或者来自不同的线程池?还是这段代码绕过线程池,直接获取一个新线程?

  2. 这是否与用于处理页面请求的线程池相同?因此,这段用于提高性能的代码实际上可以通过采用另一个线程来降低它,该线程可用于为另一个用户提供另一个资源?

  3. 线程池是否仅用于服务非静态资源? IIS 是否有自己的线程池来为不通过托管管道运行的资源提供服务?

  4. 如果应用程序会发生什么。调用_thread.Start() 后池被回收了? IIS 会允许此线程在关闭应用程序池之前完成吗?

  5. 似乎是这段代码强制创建了一个新线程。将此代码交换为使用 Async/Wait 会有好处吗? Method1() 中运行的代码受 IO 限制。

最佳答案

  1. 当您显式调用 new Thread 时,该线程不是线程池的一部分。你完全靠自己。

  2. 所谓的 ASP.NET 线程池纯粹用于处理请求消息(托管 HttpApplication 派生对象)。

  3. 静态文件由 IIS native 提供,因此 ASP.NET 线程池仅用于 ASP.NET 内容。但是在这里您应该注意到所有发生在工作进程 (w3wp.exe) 内的事情。只有一些由 native 组件处理,而其他则由托管组件处理。如果使用集成流水线模式,流水线是统一的。

  4. 应用程序池回收仅等待请求被处理。当所有请求完成后,您自己的线程将被终止。

  5. Async/await 不会自动创建线程。但是通过切换到 async/await,您确实避免了创建线程,这应该有助于提高性能。

关于asp.net - 在 IIS 上运行的 ASP.Net 应用程序中调用 Thread.Run,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35360895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com