下你所需,载你所想!
汇集开发技术源码资料

凌哥易语言协程的完美实现

:142.747KB :1 :2020-02-04 15:50:21

部分简介

.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行
.局部变量 计时, L_运行计时
.局部变量 i, 整数型
.局部变量 局_线程句柄数组, 整数型, , "0"
.局部变量 局_线程句柄, 整数型

集_协程.初始化 () ' 在内部初始化一条协程专用的线程
计时.开始 ()
.计次循环首 (2, )
集_协程.加入子程序 (到整数 (&子程序_协程), 0)
.计次循环尾 ()
集_协程.等待运行完毕 ()
调试输出 (“L_协程(类) 内部自动调度”, 计时.取毫秒 (), 计时.取秒 ())
集_协程.销毁 () ' 销毁协程,释放所有数据

计时.开始 ()
.计次循环首 (2, )
L_线程_启动2 (&子程序_线程, 0, 局_线程句柄, , , , )
加入成员 (局_线程句柄数组, 局_线程句柄)
.计次循环尾 ()

' 等待线程结束
.计次循环首 (L_数组_取成员数 (局_线程句柄数组), i)
L_线程_等待 (局_线程句柄数组 [i], )
.计次循环尾 ()
调试输出 (“线程上下文切换调度”, 计时.取毫秒 (), 计时.取秒 ())
返回 (0) ' 可以根据您的需要返回任意数值

.子程序 子程序_协程
.参数 自定义参数, 整数型

.计次循环首 (10000000, ) ' 调度1千万次
自定义参数 = 自定义参数 + 1
集_协程.调度 () ' 主动调度到另一个子光纤(调度在软件用户模式下控制)
.计次循环尾 ()

.子程序 子程序_线程
.参数 自定义参数, 整数型

' 将两条线程绑定在同一个CPU核心上,强制让它们切换调度
L_线程_绑定CPU (L_线程_取当前线程伪句柄 (), “10000000”) ' 第1个CPU核心
' 即使两条线程在不同的CPU核心上,调度速度也没有协程快,不信就把上行注释掉看看
.计次循环首 (10000000, ) ' 调度1千万次
自定义参数 = 自定义参数 + 1
L_SwitchToThread () ' 暂时放弃当前CPU时钟片,调度到其它线程(调度在windows内核模式下控制)
' Sleep (0)
.计次循环尾 ()

凌哥易语言协程的完美实现

热门推荐

相关文章