[Q/KDB+;]:Q中的waitfor(等待信号或超时)实现

[Q/KDB+;]:Q中的waitfor(等待信号或超时)实现,kdb,q-lang,Kdb,Q Lang,Windows的q实现会是什么样子 我有一个q进程,它将表中的行一次一行地馈送给另一个进程(比如tickerplant) 如果满足以下任一条件,我想输入下一行: 该进程从另一进程接收信号(next或ready) 或 等待信号超时的时间(timeout特定于tbl的每一行,并将作为tbl的一列提供) 将tbl视为包含在CEP/tickerplant的其余部分准备就绪时或下一个事件到期时按顺序发布的事件列表(timeout测量为上一个发布事件和下一个发布事件之间的增量时间跨度,即更新超时:((1 _

Windows的q实现会是什么样子

我有一个
q
进程,它将表中的行一次一行地馈送给另一个进程(比如tickerplant)

如果满足以下任一条件,我想
输入下一行:

  • 该进程从另一进程接收信号(
    next
    ready

  • 等待信号超时的时间(
    timeout
    特定于
    tbl
    的每一行,并将作为
    tbl
    的一列提供)
  • tbl
    视为包含在CEP/tickerplant的其余部分准备就绪时或下一个事件到期时按顺序发布的事件列表(
    timeout
    测量为上一个发布事件和下一个发布事件之间的增量时间跨度,即
    更新超时:((1 _增量时间),0Wp)来自tbl
    ),以较早发生者为准

    我试过
    while[.z.N
    
  • KDB是一个单线程应用程序,因此任何类似waitFor的操作都只会执行while循环
  • 1ms的精度已经相当高了……而且KDB不是为实时性而设计的。因此,如果进程忙于其他事情,甚至1ms也很容易被忽略。 如果你需要更高的精度,你可能需要C甚至驱动程序级别的帮助来提高精度

  • 也许你可以考虑一个更好的设计来避免实时需求:

  • KDB是一个单线程应用程序,因此任何类似waitFor的操作都只会执行while循环
  • 1ms的精度已经相当高了……而且KDB不是为实时性而设计的。因此,如果进程忙于其他事情,甚至1ms也很容易被忽略。 如果你需要更高的精度,你可能需要C甚至驱动程序级别的帮助来提高精度

  • 也许你可以考虑一个更好的设计来避免实时需求:


    我不确定是否有任何可用的
    系统
    调用可以帮助您,但IMO q不是这样做的合适地方。也许有一点C为您提供了此功能,您可以在
    提要
    中调用以检查状态?好奇您的用例-为什么不在消息到达时(或成批)通过IPC发送消息然后让消费进程来处理队列?这样,客户机应用程序在准备好处理下一条可用消息时,总是在处理下一条可用消息。你对慢消费程序有问题吗?@user2242865用例是backtest(replay)对于历史数据,而不是实时流。这种担心被称为前瞻性偏差:较慢的消费者不应该能够对来自未来的信息采取行动-即来自较快的消费者。假设
    tbl
    中记录的外部事件序列是A、B,我们先验地知道内部生成的事件C和D发生在t之后如果一个缓慢的进程消耗a并产生C(更新tickerplant,后者反过来发布它),一个快速的过程消耗B并产生D,观察到的顺序将是错误的ABDC。我不确定是否有任何可用的
    系统
    调用可以帮助您,但IMO q不是这样做的正确位置。也许有一点C为您提供了此功能,您可以在
    提要
    中调用以检查状态?您好奇吗r用例-为什么不在消息到达时(或成批)通过IPC发送消息,并让消费进程处理队列?这样,客户机应用程序在准备处理下一条可用消息时总是在处理。您是否对慢消费程序有问题?@user2242865该用例是回溯测试(replay)对于历史数据,而不是实时流。这种担心被称为前瞻性偏差:较慢的消费者不应该能够对来自未来的信息采取行动-即来自较快的消费者。假设
    tbl
    中记录的外部事件序列是A、B,我们先验地知道内部生成的事件C和D发生在t之后hem在整体ABCD顺序中。如果一个慢进程消耗a并生成C(更新tickerplant,然后发布它),而一个快进程消耗B并生成D,则观察到的顺序将不正确ABDC。我将播放/暂停逻辑分为三个进程:(1)feeder轮询(2)切换通过异步消息从(3.)tickerplant在播放和暂停之间来回切换的状态,具体取决于其订阅者的繁忙程度。
    waitfor
    本质上是
    ,而正如您所说的和在这里可以看到的那样:
    语句:我将播放/暂停逻辑分为三个过程:(1)feeder轮询(2)切换通过异步消息从(3.)tickerplant在播放和暂停之间来回切换的状态,具体取决于订阅者的繁忙程度。
    waitfor
    本质上是
    ,而
    语句正如您所说,可以在此处看到:
    
    feed:{h`.u.upd,x;};
    feed each tbl;