0

我有一个基于 StreamInsight 1.2 构建的应用程序,它有几个常设查询在用户定义的运算符中运行一些计算。有时,其中一个计算需要相对较长的时间才能完成(几秒钟),而且我看到它阻止了其他查询的执行。我不太熟悉 StreamInsight 的工作原理,因此我推测所有查询都在单个线程上运行。有没有办法让查询并行运行?

除了以某种方式将查询放在单独的线程上之外,我还能做些什么来防止一个偶尔长时间运行的查询阻塞其他查询?

4

2 回答 2

1

您使用的是哪个版本的 StreamInsight?标准版在单个内核上运行调度程序,而高级版使用所有可用内核。至于延迟,如果您的所有查询都依赖于挂起的时间线 - 通过加入、联合等 - 那么这就是导致它挂起的原因。事件不会从长期运行的 UDO 中“释放”以提供其他流。如果是这种情况,除非您能以某种方式重组查询,否则您无能为力。我还会开始研究为什么“偶尔”UDO 会花费几秒钟。这让我认为 UDO 有问题,但是由于不知道它在做什么的细节,我不能肯定地说。

于 2015-06-03T11:27:19.463 回答
1

如果计算偶尔需要几秒钟,这是它的本质,并且您正在运行标准版,那么您可以做的最好的事情是在计算发生时不要阻塞线程。StreamInsight 对此没有任何内置功能……这是您的责任。从 StreamInsight 的角度来看,您的 UDO 需要一些时间。它不知道为什么会这样。如果线程被阻塞,在你的 UDO 返回之前它不能运行其他任何东西。所以我会 a) 验证您正在运行标准版,然后 b) 如果是,请更改 UDO 以使其成为非阻塞/异步。

于 2015-06-04T15:01:10.237 回答