过程运行时#

过程运行时在数据库进程内部托管 Mudu 过程。它加载 WebAssembly 组件模块,将其绑定到内核的系统调用接口,并在内核控制下执行过程调用。

设计#

运行时是被动的:它不定义自己的调度器或执行策略。内核决定过程何时何地运行,运行时提供执行容器。

典型调用流程如下:

  1. 内核收到过程调用请求。

  2. 内核将请求路由到拥有目标分区的工作线程。

  3. 该工作线程的运行时加载尚未驻留的应用/模块。

  4. 运行时调用导出的过程函数,传入会话 OID 与用户参数。

  5. 过程内部通过系统调用接口访问数据库,操作陷入内核。

  6. 内核对每个系统调用应用事务、调度与一致性规则。

  7. 过程返回后,内核提交或回滚事务,并返回结果。

同步源码,异步执行#

开发者使用同步风格的 API(sys_interface::sync_api)编写过程。构建时,mtp 转译器可将阻塞式系统调用改写为适合运行时基于续体的执行器的异步形式。

这意味着:

  • 过程作者保持顺序编程模型。

  • 运行时在等待 I/O 或远程 RPC 时仍可让出执行权。

  • 同一份源码可在开发阶段交互式运行,也可作为存储过程部署。

系统调用边界#

过程通过紧凑的系统调用集访问数据库状态:

  • 会话:mudu_openmudu_close

  • SQL:mudu_querymudu_commandmudu_batch

  • KV:mudu_getmudu_putmudu_range

每次系统调用都携带会话 OID,以便内核强制执行事务与调度上下文。

适用场景#

该模型适合以下应用:

  • 需要过程边界内强一致性的场景;

  • 需要靠近数据的低延迟业务逻辑;

  • 希望避免重复客户端-服务器往返的数据本地执行。

编程模型请参见 Mudu 过程,系统调用 API 请参见 系统调用参考,组件运行时细节请参见 WebAssembly 集成