我有一个运行各种服务器的扫描的服务。 有问题的网络可以是巨大的(几十万网络节点)。
该软件的最新版本是使用队列/线程架构由我们设计了工作,但效率不高,因为它可以(不是其中最重要的,因为工作可以酿出这是没有处理好子女)
V2快到了,我使用TPL考虑。 现在看来似乎应该非常适合。
我已经看到了这个问题 ,答案,这意味着没有限制的任务TPL可以处理。 在我的简单测试(自旋向上十万任务,并给他们TPL),TPL与外的内存异常( - 尤其是在我的dev的盒子很公平)barfed相当早的。
在扫描需要的时间变长,但5分钟/任务是一个良好的平均。
你可以想像,对于庞大的网络扫描需要相当长的时间,甚至在仡服务器。
我已经有到位,让扫描作业(存储在DB)的多个扫描服务器之间被分割的框架,但问题是我应该如何准确地传递工作向TPL特定服务器上。
我可以监控TPL的队列的大小和(比如说)最糟糕的是,如果它低于几百项? 是否有一个缺点这样做呢?
我还需要处理,其中扫描需要暂停的情况。 这似乎更容易通过不给比消除可能已经被部分处理/重置任务的工作TPL做。
所有的初始任务可以按任意顺序运行。 家长已开始执行后,孩子必须运行,但由于母公司产卵他们,这不应该永远是一个问题。 孩子们可以在任何顺序运行。 正因为如此,我目前设想的是孩子的任务被写回数据库没有直接催生成TPL。 这将允许其他服务器“工作窃取”如果需要的话。
有没有人有这种方式使用第三方物流的经验吗? 是否有我需要知道的任何考虑?