在 4.0 中,如何阻塞控制流,直到句柄上收到任何消息?
\n在 3.6 版本中,我可以使用https://code.kx.com/q/basics/ipc/#block-queue-flushr:h[]中描述的技术
r:h[]但从 4.0 开始,即使我从第二个进程发送类似的内容,呼叫也会永远挂起key[.z.W]@\\:".z.i"(对于 3.6,这是第二个进程有点挂起:它开始成为进程 1 的从属进程,只为它提供服务)请求,但在 4.0 中,进程 1 永远挂起,仅响应进程 2)
这是我在2019.04.02 3.6看到的:
\n \xe2\x94\x82q)\\p 15555\nq)h:hopen`::15555 \xe2\x94\x82q)\nq) \xe2\x94\x82q).z.W\nq)h[] \xe2\x94\x825|\n// blocked \xe2\x94\x82q)5i".z.i"\n".z.i" \xe2\x94\x82// blocked\nq)q) \xe2\x94\x82// blocked\nRun Code Online (Sandbox Code Playgroud)\n
我认为该链接背后的文档应该是:
阻塞直到在句柄 h 上接收到异步消息
句柄 h 上传入的同步消息将被处理,但不会解锁套接字。套接字将保持阻塞状态,直到它在 h 上收到异步消息
服务器
q)\p 5005
q)(first key .z.W)".z.i"
2611i
q)(neg first key .z.W)"myString"
Run Code Online (Sandbox Code Playgroud)
客户
q)h:hopen 5005
q).z.pg:{-1"sync message received";value x}
q)h[]
sync message received
1+1
//socket still blocking
"myString"
q)q)2
q)q)q)q)
Run Code Online (Sandbox Code Playgroud)
您提到的 3.6 远程阻止行为已在 3.6_2021.03.04 中修复