如何在 KDB 中进行实时和并发编程?
How do I program realtime & concurrency in KDB?
我正在尝试在 KDB 中编写软实时程序。我已经设置好一切,唯一的问题是设置事件循环。
在 Python 中,我会做类似的事情:
while True:
do something
如果它是非阻塞的(或分配给 CPU 核心)就更好了,这样我就可以同时 运行 几个。
我应该如何在 KDB 中考虑这个问题?
PS 我找不到涉及此内容的文档,但如果它们存在,请对它们进行 link。
一般来说,在 kdb 中使用 while 循环并不常见,也不是最佳实践,尽管功能是存在的。
您通常会创建 kdb 实例:
一个。 event-driven(主要逻辑进入 .z.pg
/.z.ps
/.z.po
/.z.pc
以便 kdb 对 sync/async 事件和 connection/disconnection事件)或
乙。 timer-driven(主要逻辑进入.z.ts
),或者
C。以上的组合。
这将是一个“non-blocking”设置,而不是像您正确指出的那样会阻塞的 while 循环。
我认为 Terry 关于为什么不使用 while 循环的解释很好地总结了这个主题。
对于并发,有几个选项:
- peach https://code.kx.com/q/basics/peach/ 可以用来代替 each 来将处理外包给辅助线程,如果你已经开始-S(辅助线程)命令行参数
- 从 KDB+ 4.0 开始,现在默认有多线程原语:https://code.kx.com/q/kb/mt-primitives/
- 使用 KDB+ 实现并发的 'traditional' 方法是启动多个单线程 KDB+ 进程,这些进程可以通过异步 IPC 调用相互通信 https://code.kx.com/q/basics/ipc/. Some examples of systems built like this are KDB+ Tick https://github.com/KxSystems/kdb-tick and AquaQ Analytics' TorQ framework: https://aquaqanalytics.github.io/TorQ/Overview/
我正在尝试在 KDB 中编写软实时程序。我已经设置好一切,唯一的问题是设置事件循环。
在 Python 中,我会做类似的事情:
while True:
do something
如果它是非阻塞的(或分配给 CPU 核心)就更好了,这样我就可以同时 运行 几个。
我应该如何在 KDB 中考虑这个问题?
PS 我找不到涉及此内容的文档,但如果它们存在,请对它们进行 link。
一般来说,在 kdb 中使用 while 循环并不常见,也不是最佳实践,尽管功能是存在的。
您通常会创建 kdb 实例:
一个。 event-driven(主要逻辑进入 .z.pg
/.z.ps
/.z.po
/.z.pc
以便 kdb 对 sync/async 事件和 connection/disconnection事件)或
乙。 timer-driven(主要逻辑进入.z.ts
),或者
C。以上的组合。
这将是一个“non-blocking”设置,而不是像您正确指出的那样会阻塞的 while 循环。
我认为 Terry 关于为什么不使用 while 循环的解释很好地总结了这个主题。
对于并发,有几个选项:
- peach https://code.kx.com/q/basics/peach/ 可以用来代替 each 来将处理外包给辅助线程,如果你已经开始-S(辅助线程)命令行参数
- 从 KDB+ 4.0 开始,现在默认有多线程原语:https://code.kx.com/q/kb/mt-primitives/
- 使用 KDB+ 实现并发的 'traditional' 方法是启动多个单线程 KDB+ 进程,这些进程可以通过异步 IPC 调用相互通信 https://code.kx.com/q/basics/ipc/. Some examples of systems built like this are KDB+ Tick https://github.com/KxSystems/kdb-tick and AquaQ Analytics' TorQ framework: https://aquaqanalytics.github.io/TorQ/Overview/