co = coroutine.create(function () –创建协同程序 print(“hi coroutine”) end) print(co) –> thread: 0x8071d98 返回值 co 是thread类型 –刚创建的协同程序默认状态是 挂起状态(suspended) print(“hi?”); print(coroutine.status(co)) –检查协同程序的状态 print(coroutine.resume(co) ) –> hi –调用 resume 使 协同程序恢复运行 变为 运行态(running) print(coroutine.status(co)) –> dead –协同程序执行完毕 变为终止态(dead) –个人感觉协同程序有点类似于微软的”纤程” 这个概念 print(“yield 函数演示 可以挂起协同程序”) co = coroutine.create(function () for i=1,10 do print(“co”, i) coroutine.yield() end end) coroutine.resume(co) –> co 1 print(coroutine.status(co)) –> suspended coroutine.resume(co) –> co 2 coroutine.resume(co) –> co 3 coroutine.resume(co) –> co 4 coroutine.resume(co) –> co 5 coroutine.resume(co) –> co 6 coroutine.resume(co) –> co 7 coroutine.resume(co) –> co 8 coroutine.resume(co) –> co 9 coroutine.resume(co) –> co 10 print(“and?”) coroutine.resume(co) –> co ? print(coroutine.resume(co)) –协同程序已经死了` print(“and2?”) print(“通过resume传递参数给 协同程序”) co = coroutine.create(function (a,b,c) –带参数的协同程序 print(“co”, a,b,c) end) coroutine.resume(co,11,22,33); –传递参数给协同程序 print(“协同程序内传递参数给 resume”) co = coroutine.create(function (a,b) coroutine.yield(a + b, a - b) end) print(coroutine.resume(co, 20, 10)) –> true 30 10 print(“协同代码结束时的返回值 也会传给resume”) co = coroutine.create(function () return 6, 7 end) print(coroutine.resume(co)) –> true 6 7

感谢您的阅读,本文由 smallwhite's Blog 版权所有。如若转载,请注明出处:smallwhite's Blog(https://smallwhite.ml/pub/uncategorized/xie-tong-xiang-guan-xie-tong-de-ji-chu.html
协同程序 过滤器
无状态迭代器