线程与计时器与服务

时间:2012-09-22 21:39:00

标签: c# .net

我正在阅读此博客Easy Background Tasks关于某个名为stackoverflow:P的页面的徽章系统,因此,在评论中说他们以执行任务的服务结束,但例如:

用户在时间T1执行操作 此操作取决于X个用户 在时间T2之后,您需要执行一些数据库查询并通知用户(电子邮件或其他)

我说这是因为实时经验,所以这里的问题是,如果你使用线程,假设有1000个用户执行操作,你将有1000个等待线程,所以在一段时间内,会有reciclyng ,或者如果服务器由于某种原因而关闭,您将失去所有这些任务。使用计时器将以相同的情况结束

如果您使用某项服务,您将失去实时体验,例如在线游戏中。

那么,如何处理这类东西?

1 个答案:

答案 0 :(得分:3)

使用线程和信令时应该小心。 解决方案取决于场景的细节,但其中一个可扩展的解决方案是轮询

根据您的场景,线程之间的信令效率不高,因为线程池中始终存在有限数量的可用线程。但是,如果您知道将持有线程的最大用户数(取决于游戏设计),您可以使用WaitHandles(AutoResetEvent和/或ManualResetEvent)在线程之间发出信号。但请确保在Global.asax的Application_Start事件处理程序中增加了池中可用线程的数量

            int availableThreads;

            int availablePorts;

            ThreadPool.GetAvailableThreads(out availableThreads, out availablePorts);

            ThreadPool.SetMinThreads(availableThreads, availablePorts);

希望它有所帮助。