0

我搜索了 Stackoverflow 和 Google,但找不到适合我情况的答案。这是我的设计。

1)我定义了两个状态机工作流程(父母和孩子)。父 WWF 监督子 WWF 的状态,子 WWF 是实际执行给定消息任务的人。

2) 父 WWF 生成 500 个子 WWF (instance.Start())。然后使用父 WWF 内的复制器活动控制(并行执行模式),触发子启动事件。

3) 代码托管在 VM 中(8 GB RAM,4 个 CPU 内核,具有自己的应用程序池的 IIS 7.0)。

我注意到执行相同代码的两种不同行为:

A) 有时执行只需要 8 秒即可完成所有 500 个儿童 WWF 的处理,这非常棒。

B) 然而,在父 WWF 中为所有 500 个子对象执行 Instance.Start() 之后,有时复制器活动只是挂起 30-40 秒,什么也不做,然后每个子 WWF 几乎按顺序处理。因此,完成之前在 8 秒内完成的相同工作大约需要 300-400 秒。

根据我的发现,我认为这一切都与线程池管理有关。由于我的代码不直接处理 ThreadPool.QueueWorkItem() 并且 WWF 实际上在幕后的不同线程上工作,因此我对 WWF 的线程管理几乎没有控制权。

在场景 B 中,当我观察系统性能时,CPU 在几秒钟内上升到 80%,然后下降。之后 30-40 秒内没有任何活动,然后它才真正开始处理每个 WWF 子进程。

那么瓶颈/缓慢在哪里,我们如何解决这种偶尔的停顿?

有什么建议么?

谢谢你的时间。

4

0 回答 0