2

在我进入这个问题之前,我想说的是,我已经阅读了 IIS 7、7、7.5 的线程建模,所以我知道线程是如何处理的。

当请求进来时,我的应用程序启动一个线程。

我们可以将线程假设为 cron 作业。

  1. GET 请求进来,让我们说 /Handle
  2. 在 /Handle 的范围内,我从该操作开始一个线程,线程 A
  3. 我不会长时间轮询 GET 请求,因此它会立即返回给用户。所以处理 GET 的线程返回到 POOL
  4. 然后我等到线程 A 完成做任何其他事情。
  5. 所以据我所知,没有线程正在运行。处理 GET 和 THREAD A 的线程都已退出。

我多次提出相同的要求。我总是等待两个线程退出。过了一会儿`Thread.Start()1 功能块。

问题:我知道线程正在返回并且我没有泄漏任何幽灵线程。为什么 IIS 不允许我在 4-5 个请求后启动新线程。?

为用户应用程序创建应用程序线程的正确方法是什么。如果我说Thread t= new Thread(),这是否会从处理GETS 或CLR 的池中分配一个线程?我正在使用 IIS7。

我知道我退出了每个线程,我在 THREAD A 上调用了一个 JOIN,它永远不会阻塞,此时我并不担心可伸缩性,所以我总是让一个用户按顺序访问服务器。

4

1 回答 1

2

因此,要回答您的问题“为用户应用程序创建应用程序线程的正确方法是什么?” (即 ASP.NET 应用程序) - 您有很多选择:

  • 在 ASP.NET 线程上运行,没有任何线程 - ASP.NET 仍将处理多个请求
  • 对长时间运行的操作使用异步调用(请参阅异步操作)
  • 使用CLR 线程池
  • 向其他服务器发送消息(例如使用 WCF 服务),因此长时间运行的处理发生在 Web 服务器之外。

您提到阅读 ASP.NET 中的线程,但在“MSDN:在 ASP.NET 应用程序中执行异步工作或任务”中,对 ASP.NET中的线程如何工作进行了相对简短的描述。帖子最后有一个问题: “Q4:我应该创建自己的线程(新线程)吗?” 该问题的答案是“A4)请不要(创建新线程)。或者换一种说法,不!!!(...)”。

并回答您的问题:“为什么 IIS 不允许我在 4-5 个请求后启动新线程”? 这真是一个奇怪的行为,也许 IIS 知道你做错了;)

于 2012-12-13T18:52:25.837 回答