README

#process — 协程进程调度层

MoonDES 层级2:基于 ProcessAction 指令式 API 实现协程式挂起-恢复。

#API 概览

符号说明
Process仿真进程
ProcessAction进程动作指令
ProcessBehavior行为函数类型
ProcessStatus进程状态
process(env, behavior=)创建进程
Done进程完成
Timeout(duration=, next=)延时后执行 next
WaitEvent(event=, next=)等待事件后执行 next
Terminate立即终止

#示例

///|
test {
let env = @core.new_env(until=20.0)
let log : Array[String] = []
ignore(
process(env, name="timer", behavior=fn(_) {
log.push("start at \{env.now()}")
Timeout(duration=5.0, next=fn() {
log.push("resume at \{env.now()}")
Done
})
}),
)
env.run()
assert_eq(log[0], "start at 0")
assert_eq(log[1], "resume at 5")
}

#
ProcessBehavior

type ProcessBehavior = (Process) -> ProcessAction

进程行为函数类型

#
Process

pub(all) struct Process {
id : Int
name : String
status : ProcessStatus
behavior : (Process) -> ProcessAction
}

仿真进程

基于指令式协程调度。进程行为函数返回 ProcessAction 描述下一步行为, 引擎根据动作调度恢复事件,在事件触发时执行 next 续延。 不占用操作系统线程,支持上万并发进程。

#
Process::id

fn Process::id(self : Process) -> Int

获取进程 ID

#
Process::is_alive

fn Process::is_alive(self : Process) -> Bool

进程是否存活

#
Process::name

fn Process::name(self : Process) -> String

获取进程名称

#
ProcessAction

pub(all) enum ProcessAction {
Done
Timeout(duration~ : Double, next~ : () -> ProcessAction)
WaitEvent(event~ :
Event
, next~ : () -> ProcessAction)
Terminate
}

进程动作:描述进程的下一步行为

进程行为函数返回 ProcessAction 与调度器交互,实现协程式挂起-恢复:
  • Done:进程执行完毕
  • Timeout:延时 duration 后执行 next,仿真时间推进
  • WaitEvent:等待 event 触发后执行 next
  • Terminate:立即终止进程

Example

test {
let env = @core.new_env(until=20.0)
let log : Array[String] = []
ignore(
process(env, name="timer", behavior=fn(_) {
log.push("start at \{env.now()}")
Timeout(duration=5.0, next=fn() {
log.push("resume at \{env.now()}")
Done
})
}),
)
env.run()
assert_eq(log[0], "start at 0")
assert_eq(log[1], "resume at 5")
}

#
ProcessStatus

pub(all) enum ProcessStatus {
Created
Running
Suspended
Terminated
} derive(Eq,
Debug
)

进程状态

#
process

fn process(env :
SimulationEnv
, name? : String, behavior~ : (Process) -> ProcessAction) -> Process

创建仿真进程并注册到环境

进程在 env.run() 时按调度顺序执行其 behavior。 behavior 返回 ProcessAction 描述进程的下一步行为。

Source Files