zoukankan      html  css  js  c++  java
  • LUA协程

    一  LUA 协程函数

    1 resume

    local  status, returnvs = coroutine.resume(co, params)

    co 为 所要启动的协程。

    第一次调用resume时,参数是协程函数入口的参数,协程函数调用coroutine.yield之后交出控制权

    后面继续调用resume恢复该协程时, 参数是作为上次调用coroutine.yield处的返回值

    status表明此次调用co是否有运行,co的状态。

    若resume返回时co未结束,returnvs为coroutine.yield传递的参数。

    如果返回时co已经结束,returnvs为co的return的返回值

    2 yield

    co(params)

        local ins = coroutine.yield(returnvs)

    end

    returnvs 作为本次调用co的 coroutine.resume的返回值。

    ins为下次coroutine.resume重新调用co时输入的参数params。

    二 例子

    function consumer(arg)

             local v = 0

             print("consumer arg ", arg) //第一次调用coroutine.resume后开始执行consumer,参数通过coroutine.resume传入

             while true

             do

                       recv = coroutine.yield(v*2) //第一次执行到这句开始暂停,等待再次调用coroutine.resume,再次调用coroutine.resume后,recv值就是

    //coroutine.resume传入的参数,yield的参数就是给coroutine.resume返回的值

                       if recv == 0

                       then

                                break

                       end

                       v = recv

                       print("consumer, recv-> ", recv)

             end

    end

    function produce()

             co = coroutine.create(consumer)

             local  status, returnvs = coroutine.resume(co, "hello func agr")

             i = 1

             repeat

                       status, returnvs = coroutine.resume(co, i)

                       print("produce, ret-> ", returnvs, " ")

                       i = i + 1

             until( i > 10 )

             status, returnvs = coroutine.resume(co, 0)

             print(status, returnvs)

    end

    produce()

    三 总结

    1 yield的参数就是resume的返回值,resume的参数就是yield的返回值,参数可以是多个参数

    2 第一次调用resume时的参数是协程函数入口的参数

    3 第一次碰到yield语句之后协程停止执行,直到调用resume唤醒

  • 相关阅读:
    nginx系列11:负载均衡哈希算法ip_hash与hash模块
    nginx系列10:通过upstream模块选择上游服务器和负载均衡策略round-robin
    nginx系列9:HTTP反向代理请求处理流程
    css 滚动条样式
    Vue优化:常见会导致内存泄漏问题及优化
    vue自定义指令导致的内存泄漏问题解决
    vue动态绑定class的几种方式
    前端知识点回顾之重点篇——CSS中flex布局
    Javascript数组操作
    pc端常用电脑屏幕 ((响应式PC端媒体查询)电脑屏幕分辨率尺寸大全)
  • 原文地址:https://www.cnblogs.com/sysnap/p/6910066.html
Copyright © 2011-2022 走看看