Windows waitfor
的q实现如何?
我有一个q
进程,一次一个地将一行表的行提供给另一个进程(比如tickerplant)。
feed:{h`.u.upd,x;};
feed each tbl;
如果符合任何一个条件,我想feed
下一行:
next
或ready
); 或
timeout
特定于tbl
的每一行,并将作为tbl
列将tbl
视为包含当其余CEP / tickerplant准备就绪 OR 时下一个事件到期时要顺序发布的事件列表({{1}测量为最后发布的事件与下一个事件之间的增量时间跨度,即timeout
),以较早者为准。
我已尝试update timeout:((1 _deltas time),0Wp) from tbl
,但while[.z.N<prevtstamp+timeout;wait()];feed x
阻止了进程收听来自其他进程AFAIK的异步消息。
考虑的其他解决方案 :
检查while
的信号太慢,因为.z.ts
精度不能低于1ms。
从\t
循环内连续轮询tickerplant的next
(ready
)信号将减慢tickerplant的速度。
一种解决方案是维护while
当前行的i
索引,将馈线分成两个进程,每个进程分别处理一个条件并轮询当前tbl
索引。与i
行相比,这听起来很慢。
答案 0 :(得分:1)
1ms的精度已经很高了......并且KDB不是为实时设计的。因此,如果过程正在忙于其他事情,那么即使1ms也很容易被错过。 如果你需要更高的精度..你可能需要C或甚至Driver级别的帮助来提高精度。
也许你可以考虑更好的设计来避免实时要求:)