差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
| manual:reference:grammar:function:main_page [2023/03/23 17:03] – mikecovlee | manual:reference:grammar:function:main_page [2023/03/23 17:16] (当前版本) – mikecovlee | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| ====== Covariant Script 函数 ====== | ====== Covariant Script 函数 ====== | ||
| - | \\ | ||
| - | |||
| ===== 6.1 定义 ===== | ===== 6.1 定义 ===== | ||
| 行 45: | 行 43: | ||
| ===== 6.3 协程(Coroutine) ===== | ===== 6.3 协程(Coroutine) ===== | ||
| + | |||
| + | // | ||
| CovScript 函数可以转换为协程(Coroutine) | CovScript 函数可以转换为协程(Coroutine) | ||
| 行 52: | 行 52: | ||
| 相对于线程(Thread),多个协程不会同时运行,仅在单个线程内进行函数执行上下文的切换,从而实现了并发编程 | 相对于线程(Thread),多个协程不会同时运行,仅在单个线程内进行函数执行上下文的切换,从而实现了并发编程 | ||
| - | 更进一步说,线程是由调度器进行**抢占式调度**,在多 CPU 系统中会**并行**执行;而协程是主动**让出(yield)**时间片,仅运行在单个 CPU 核心上,属于**协作式调度** | + | 更进一步说,线程是由调度器进行**抢占式调度**,在多 CPU 系统中会**并行**执行; |
| + | |||
| + | 而协程是主动**让出(yield)**时间片,仅运行在单个 CPU 核心上,属于**协作式调度** | ||
| CovScript 协程是**堆栈式非对称协程(Stackful Asymmetric Coroutine)**: | CovScript 协程是**堆栈式非对称协程(Stackful Asymmetric Coroutine)**: | ||
| * 堆栈式意味着每个协程都拥有独立的栈,并会随着协程切换而一同切换 | * 堆栈式意味着每个协程都拥有独立的栈,并会随着协程切换而一同切换 | ||
| * 非对称式意味着语言运行时不会对协程进行主动调度,需要由协程主动进行调度 | * 非对称式意味着语言运行时不会对协程进行主动调度,需要由协程主动进行调度 | ||
| + | |||
| + | <code matlab> | ||
| + | function co_func() | ||
| + | system.out.println(" | ||
| + | context.yield() | ||
| + | system.out.println(" | ||
| + | end | ||
| + | var co = context.create_co(co_func) | ||
| + | system.out.println(" | ||
| + | context.resume(co) | ||
| + | system.out.println(" | ||
| + | context.resume(co) | ||
| + | </ | ||
| + | |||
| + | 这是一个简单的示例,命令行会依次输出: | ||
| + | |||
| + | <code bash> | ||
| + | Launch coroutine | ||
| + | Coroutine started | ||
| + | Resume coroutine | ||
| + | Coroutine resumed | ||
| + | </ | ||
| + | |||
| + | 更多协程相关的 API 可参考 [[manual: | ||