差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

后一修订版
前一修订版
manual:reference:grammar:function:main_page [2021/06/28 14:20] – 创建 jolamanual:reference:grammar:function:main_page [2023/03/23 17:16] (当前版本) mikecovlee
行 1: 行 1:
 ====== Covariant Script 函数 ====== ====== Covariant Script 函数 ======
------ 
-\\ 
- 
 ===== 6.1 定义 ===== ===== 6.1 定义 =====
  
行 19: 行 16:
 **函数在被调用时,将传入参数的引用,返回时也将返回引用** **函数在被调用时,将传入参数的引用,返回时也将返回引用**
  
-函数的变体包括[[:manual:reference:grammar:function:main_page#6.2 可变参数|lambda 表达式]]和[[:manual:reference:grammar:structure:main_page#7.2 成员函数|成员函数]]+函数的变体包括[[:manual:reference:grammar:expression:main_page#3.6 lambda 表达式|lambda 表达式]]和[[:manual:reference:grammar:structure:main_page#7.2 成员函数|成员函数]]
 ----- -----
 \\ \\
行 45: 行 42:
 可变参数函数被调用时,可变参数列表会被以数组的形式呈现,若需要二次转发可使用展开运算符''...''展开 可变参数函数被调用时,可变参数列表会被以数组的形式呈现,若需要二次转发可使用展开运算符''...''展开
  
 +===== 6.3 协程(Coroutine) =====
 +
 +//要求:210506 或更高语言标准,3.4.2 以上解释器版本//
 +
 +CovScript 函数可以转换为协程(Coroutine)
 +
 +{{:manual:reference:grammar:function:coroutines.png?400|}}
 +
 +相对于线程(Thread),多个协程不会同时运行,仅在单个线程内进行函数执行上下文的切换,从而实现了并发编程
 +
 +更进一步说,线程是由调度器进行**抢占式调度**,在多 CPU 系统中会**并行**执行;
 +
 +而协程是主动**让出(yield)**时间片,仅运行在单个 CPU 核心上,属于**协作式调度**
 +
 +CovScript 协程是**堆栈式非对称协程(Stackful Asymmetric Coroutine)**:
 +  * 堆栈式意味着每个协程都拥有独立的栈,并会随着协程切换而一同切换
 +  * 非对称式意味着语言运行时不会对协程进行主动调度,需要由协程主动进行调度
 +
 +<code matlab>
 +function co_func()
 +    system.out.println("Coroutine started")
 +    context.yield()
 +    system.out.println("Coroutine resumed")
 +end
 +var co = context.create_co(co_func)
 +system.out.println("Launch coroutine")
 +context.resume(co)
 +system.out.println("Resume coroutine")
 +context.resume(co)
 +</code>
 +
 +这是一个简单的示例,命令行会依次输出:
 +
 +<code bash>
 +Launch coroutine
 +Coroutine started
 +Resume coroutine
 +Coroutine resumed
 +</code>
 +
 +更多协程相关的 API 可参考 [[manual:reference:package:standard:main_page#解释器上下文环境|解释器上下文环境]] 文档