zoukankan      html  css  js  c++  java
  • 清晰明亮的白色lua协程(coroutine)

    协同程序线程类和多线程下似:它有它自己的堆栈。自己的局部变量。它有自己的指令指针,但是,其他协程共享全局变量和其他项目信息。主要不同在于:多处理器的情况下。概念上来说多线程是同一时候执行多个线程,而协程是通过协作来完毕,不论什么时刻仅仅有一个协程程序在执行。而且这个在执行的协程仅仅有明白被要求挂起时才会被挂起

    你能够使用coroutine.create来创建协程:
    co = coroutine.create(function ()
         print("hi")
    end)

    协程有三种状态:挂起,执行,停止。

    创建后是挂起状态。即不自己主动执行。status函数能够查看当前状态。

    协程真正强大的地方在于他能够通过yield函数将一段正在执行的代码挂起。


    lua的resume-yield能够互相交换数据
    假设没有相应的yield,传递给resume的额外參数将作为參数传递给协程主函数:
    co = coroutine.create(function (a, b, c)
         print("co", a, b, c)
    end)
    coroutine.resume(co, 1, 2, 3)

    假设没有错误的话,resume将返回true和yield的參数:
    co = coroutine.create(function (a, b)
         coroutine.yield(a+b, a-b)
    end)
    print(coroutine.resume(co, 3, 8))

    相同地,yield也将返回由相应的resume传递而来的參数:
    co = coroutine.create (function ()
    print("co", coroutine.yield())
    end)
    coroutine.resume(co)
    coroutine.resume(co, 4, 5)

    最后,协程主函数返回值将作为与之相应的resume的返回值(第一个參数是true)。
    co = coroutine.create(function ()
    return 6, 7
    end)
    print(coroutine.resume(co)) 

    (终点)

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    我的2015羊年总结
    谈对象 MVC 和 多端
    自建博客随想录
    梦说1+1等于多少
    多媒体文件格式全解说(下)--图片
    多媒体文件格式全解说(上)--音视频
    做一个“代码模块”交易的网站
    写个屏蔽百度搜索广告的Chrome插件
    Go 系列教程 —— 5. 常量
    Go 系列教程 —— 4. 类型
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4823257.html
Copyright © 2011-2022 走看看