2010-08-25 24 views
1

我的情况是这样的,我有一个文件,在一两个小时的过程中(MP3,视频等)缓慢地填充。在填充此文件时,许多用户连接到服务器以在添加到服务器时接收新数据。什么是ASP.NET线程池的正确使用?

此刻每个访问者都连接到服务器,IHttpAsyncHandler会从线程池中分配一个线程来处理请求。但是,使用默认的线程池设置,这意味着一次只有20个访问者可以连接到服务器(单个处理器)。

因为大多数时候这些线程只是在等待新数据,所以将线程释放到池中的最佳方式是什么,并在有新数据可用时将其重新激活。

非常感谢, 安以轩

回答

1

我只想用普通Thread S表示这一目的。 .NET ThreadPool并不是真的被设计用来支持(长时间运行)线程的释放和重新激活,这取决于它们的内部状态......至少,你必须做一些创造性的编程来达到所需的行为if您坚持使用ThreadPool(即将逻辑分解为由ThradPool执行的小型异步任务)。

如果使用Thread,那么您将直接控制所有活动线程,以便您可以同时接受更多访问者。

0

F#有一个名为Asynchronous Workflows的功能,非常适合这类事情。当您的代码正在等待外部数据源时,线程将返回到线程池以供其他用途。当新数据到达时,工作流会从线程池中获取一个线程,并使用它从您离开的地方恢复代码。通过这种方式,你永远不必绑定一个无所事事,只能等待I/O的线程。

对于这种使用学习一种新的语言可能矫枉过正,但是当涉及到异步I/O时,F#超越了每种其他CLR语言,而且这是一种非常有趣的语言。

相关问题