运维开发网

c# – 在多线程工作队列处理器中管理ThreadPool饥饿?

运维开发网 https://www.qedev.com 2020-05-26 16:59 出处:网络 作者:运维开发网整理
我正在研究工作队列处理器的设计,其中QueueProcessor从队列中检索命令模式对象并在新线程中执行它. 我试图了解一个潜在的Queue锁定场景,其中嵌套的命令可能导致死锁. 例如. 将FooCommand对象放置在QueueProcessor然后在其自己的线程中执行的队列中. 执行FooCommand将BarCommand放入队列. 假设允许的最大线程数仅为1个线程,则QueueProces
我正在研究工作队列处理器的设计,其中QueueProcessor从队列中检索命令模式对象并在新线程中执行它.

我试图了解一个潜在的Queue锁定场景,其中嵌套的命令可能导致死锁.

例如.

将FooCommand对象放置在QueueProcessor然后在其自己的线程中执行的队列中.

执行FooCommand将BarCommand放入队列.

假设允许的最大线程数仅为1个线程,则QueueProcessor将处于死锁状态,因为FooCommand无限期等待BarCommand完成.

如何管理这种情况?队列对象是作业的正确对象吗?是否有任何制衡措施可以解决这个问题?

非常感谢. (应用程序使用C#.NET 3.0)

对于像这样的简单情况,可以根据需要分离更多线程的附加监视线程是有帮助的.

基本上每N秒检查一次作业是否已完成,如果没有,则添加另一个线程.

这不一定能处理更复杂的死锁问题,但它会解决这个问题.

我对更重的问题的建议是限制等待新生成的进程,换句话说,你只能等待你开始的事情,这样你永远不会遇到死锁,因为在那种情况下循环是不可能的.

0

精彩评论

暂无评论...
验证码 换一张
取 消