Kdb 并行执行-哪一方报告错误?

Kdb 并行执行-哪一方报告错误?,kdb,k,Kdb,K,使用不同的方法sync/async回调调用方进程时,我在不同方面遇到错误: $ q -p 1234 │$ q │q)h:hopen`::1234; │q)neg[h]({.z.w x};42) q)'type │ │q)neg[h]({neg[.z.w] x};42) │q)'type │ │q)neg[h]({neg[.z.w]

使用不同的方法sync/async回调调用方进程时,我在不同方面遇到错误:

$ q -p 1234  │$ q
             │q)h:hopen`::1234;
             │q)neg[h]({.z.w x};42)
q)'type      │
             │q)neg[h]({neg[.z.w] x};42)
             │q)'type
             │
             │q)neg[h]({neg[.z.w] x};42); h[]
             │42
你能解释一下第一和第二种情况下的这种行为吗?为什么使用sync callback命令.z.w x在第二个进程上出现异常,而使用neg[.z.w]回调在调用方上出现异常

对于第三种情况:这是否类似于IPC中的一种模式或常见用例,用空args h[]/h::跟踪带有“sync”句柄的异步调用,以获取返回的结果,并为它们生成这样的ad hock处理程序

Upd: 阻塞接收构造是否替换.z.ps/.z.pg调用

Upd2: 如果存在延迟同步-是否存在延迟异步


当被问及Upd和Upd2时。

以下内容有助于澄清发生了什么

案例1: 这会使遥控器出现故障,但事实并非如此。它正在远程对“.z.w 42”进行评估,它将同步消息发送回本地进程,在本地进程中由默认定义为value的.z.pg对其进行评估值42'会导致类型错误,并返回给远程服务器

q)h:hopen 1234
q).z.pg:{value x};system"e 1"
q)neg[h]({.z.w x};42)
q)'type
  [0]  .z.pg:{value x}
              ^
q))
案例2: 同样,这次由.z.ps对“value 42”的求值失败,默认定义也是value,并出现类型错误,但由于它是异步的,因此不会返回到发送进程

q).z.ps:{value x}
q)
q)neg[h]({neg[.z.w] x};42)
q)'type
  [0]  .z.ps:{value x}
              ^
q))
案例3: 这是一种称为延迟同步的IPC通信方法。在发送异步消息后,我们使用称为阻塞接收的构造阻塞/侦听/挂起连接,等待响应

在某些情况下,可能不需要挂起连接,也就是说,如果回调调用了类似这样的另一个函数

q)neg[h]({neg[.z.w](0N!;x)};42);
q)42

q)add:(0N!10+);neg[h]({neg[.z.w](`add;x)};42);
q)52

延迟同步消息在mserve.q中使用-

下面应该有助于澄清发生了什么

案例1: 这会使遥控器出现故障,但事实并非如此。它正在远程对“.z.w 42”进行评估,它将同步消息发送回本地进程,在本地进程中由默认定义为value的.z.pg对其进行评估值42'会导致类型错误,并返回给远程服务器

q)h:hopen 1234
q).z.pg:{value x};system"e 1"
q)neg[h]({.z.w x};42)
q)'type
  [0]  .z.pg:{value x}
              ^
q))
案例2: 同样,这次由.z.ps对“value 42”的求值失败,默认定义也是value,并出现类型错误,但由于它是异步的,因此不会返回到发送进程

q).z.ps:{value x}
q)
q)neg[h]({neg[.z.w] x};42)
q)'type
  [0]  .z.ps:{value x}
              ^
q))
案例3: 这是一种称为延迟同步的IPC通信方法。在发送异步消息后,我们使用称为阻塞接收的构造阻塞/侦听/挂起连接,等待响应

在某些情况下,可能不需要挂起连接,也就是说,如果回调调用了类似这样的另一个函数

q)neg[h]({neg[.z.w](0N!;x)};42);
q)42

q)add:(0N!10+);neg[h]({neg[.z.w](`add;x)};42);
q)52
在mserve.q中使用延迟同步消息传递-