(loko system fibers) 库导出纤程的过程。纤程是一种基于 Concurrent ML 的轻量级并发形式。概览请参见 see 并发。
创建一个新的纤程,它将开始运行过程 thunk,该过程不接受参数。
创建一个新的通道。通道是两个纤程可以会合以交换消息的地方。通道中没有缓冲。
如果 obj 是通道,则为真。
将消息 obj 放在通道 channel 上。阻塞直到另一个纤程取走该消息。返回未指定的值。
从通道 channel 获取消息。阻塞直到另一个纤程带着消息到达。返回消息。
将纤程阻塞 time 秒。
返回一个操作对象,表示将消息 obj 放在通道 channel 上。
返回一个操作对象,表示从通道 channel 获取消息。
返回一个操作对象,与操作 op 相同,除了值被过程 f 包装。
返回一个操作对象,表示等待从调用此过程的时间起经过 seconds 秒。
返回一个操作对象,表示等待直到绝对时间 a(以内部时间单位计)。
返回一个操作对象,表示在给定操作 op … 之间的选择。如果多个操作可以执行,则非确定性地选择一个。
不带参数调用此过程不是错误。实际上,在收集操作时这是一个有用的构造。
如果在选择操作上使用 wrap-operation,则每个操作都会被包装。
执行操作 op,可能会阻塞纤程直到操作就绪。
使用 choice-operation 和 perform-operation,可以编写等待多个操作中某一个的代码。这可以是简单的带超时等待消息:
(perform-operation (get-operation ch) (sleep-operation 1))
此示例将等待通道 ch 上的消息最多一秒钟。为了区分消息和超时,使用 wrap-operation:
(perform-operation (choice-operation (wrap-operation (get-operation ch) (lambda (x) (cons 'msg x))) (wrap-operation (sleep-operation 1) (lambda _ 'timeout))))
此代码将返回 (msg . x),其中 x 是接收到的消息;但如果超过一秒没有消息,则返回 timeout。
从 choice-operation 返回的对象可以从过程中返回、存储在数据结构中、通过通道发送等。
创建一个新的 条件变量(在 Concurrent ML 的术语中)。这些允许程序等待某个条件被发出信号。参见下面的过程。
如果 obj 是条件变量,则为真。
向条件变量 cvar 发出信号,解除阻塞所有正在等待它的纤程。
等待条件变量 cvar 被发出信号,阻塞直到它发生。
返回一个操作,表示等待条件变量 cvar 被发出信号。
让出当前任务并让另一个纤程运行。这在 I/O 密集型程序中通常不需要,但提供了让 CPU 密集型程序合作并自愿让其他纤程运行的能力。
停止正在运行的纤程。
提供以兼容 Guile。它在纤程调度器中运行过程 init-thunk。此过程在 Loko 中可能比在 Guile 中更早返回。Guile 提供它是因为纤程不是其运行时的集成功能,因此它需要一个入口点来指示何时启动和停止纤程设施。