差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
manual:reference:grammar:function:main_page [2023/03/23 17:04] – 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) | ||
行 54: | 行 54: | ||
更进一步说,线程是由调度器进行**抢占式调度**,在多 CPU 系统中会**并行**执行; | 更进一步说,线程是由调度器进行**抢占式调度**,在多 CPU 系统中会**并行**执行; | ||
- | 而协程是主动**让出(yield)**时间片,仅运行在单个 CPU 核心上,属于**协作式调度** | + | 而协程是主动**让出(yield)**时间片,仅运行在单个 CPU 核心上,属于**协作式调度** |
CovScript 协程是**堆栈式非对称协程(Stackful Asymmetric Coroutine)**: | CovScript 协程是**堆栈式非对称协程(Stackful Asymmetric Coroutine)**: | ||
行 60: | 行 60: | ||
* 非对称式意味着语言运行时不会对协程进行主动调度,需要由协程主动进行调度 | * 非对称式意味着语言运行时不会对协程进行主动调度,需要由协程主动进行调度 | ||
- | 具体来说,协程相关的 API 可参考 [[manual: | + | <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: |