2012-09-16 32 views
0

情况:用于去耦的异步处理天青Web角色 - Monitor.Wait和线程starvation

  1. 接收请求
  2. 地方请求有效载荷到一个队列:一个高规模天青IIS7应用程序,它必须执行此
  3. 保持连接到客户端
  4. 等待异步过程已完成
  5. 响应客户端的通知

请注意,这些将是长时间运行的过程(30秒到5分钟)。

如果我们在这里使用Monitor.Wait(...),等待从异步进程到同一个Web应用程序的回调,以调用Monitor.Pa ...()对我们调用Monitor.Wait (),这是否会在短时间内有效地创建线程匮乏?

如果是这样,该如何缓解?在这里等待回调是否有更好的模式?例如,我们可以将Response对象放在线程安全的字典中,然后以某种方式让步,让回调代码锁定Response并继续响应客户端?如果是这样,怎么样?

另外,如果异步进程死亡并且从不调用回调,从而不会导致Monitor.Pulse()触发?我们的线程现在挂了吗?

+2

为什么你不看AsyncPage/AsyncController呢? – astaykov

+0

谢谢。根据你的建议,我们考虑了这一点,这绝对是一条路。我们的新挑战是Azure主题上的100个并发连接限制,所以我们只需要启动更多主题。你能做出这个答案吗?如果你这样做,我会检查这个盒子。 –

回答

1

考虑到您的要求,我建议看看AsyncPage/AsyncController(取决于您使用ASP.NET WebForms还是ASP.NET MVC)。这些使您可以在IIS中执行长时间运行的任务而不会阻塞I/O线程。