lua-coroutine

兩個協程,經過resume/yield函數參數(或者return語句)向對方傳送數據,經過resume/yield函數返回值來從對方處獲取傳送數據
 
        function coroutine_func(resume1.Args)
                    yield1  return resume2.Args
                    yield2  return resume3.Args
          end
                             
           resume1() return true,yield1.Args
                resume2() return true,yield2.Args
                resume3() return true,coroutine_func.return
        
                將Resume做爲一個服務A, coroutine_func做爲一個服務B
                則  A傳遞數據(resume1.Args)給B, B獲取後(由函數的參數獲取),把響應數據(yield1.Args)>
                A繼續傳遞數據給(resume2.Args)給B,B獲取後(由yield1.return獲取),把響應數據(yield2.A
                即,A(resume)和B(yield)都是經過參數來向對方傳送數據,而經過返回值來從對方處獲取傳送
 
    一個異步的實現方法爲 
                    function runAsyncFunc(func,...)
                        local current = coroutine.running 
                        func.callback = function() coroutine.resume(current) end
                        coroutine.yield --等待動做完成後經過回調函數來恢復執行
                    end  
 
  一個讀寫消費者的例子:
  
  function  producer()
    return coroutine.create(function()
        while true do 
          local data = io.read()
          coroutine.yield(data)
        end
      end)
  end 
 
  function consumer(p)
    while true do
      local status, data = coroutine.resume(p)
      print(data)
    end 
  end

  consumer(producer())異步

 

  添加 filter:函數

      function filter(source)協程

    return coroutine.create(function ()回調函數

        for x = 1, 10 doio

          local status, data = coroutine.resume(source)function

          cortine.yield('from filter' .. data)coroutine

        endyield

      end)方法

  end call

  function consumer(filter)

    while true do

      local status, data = coroutine.resume(filter)

      if not status then return end

      print (data) 

    end

     end

 

  comsumer(filter(producer()))

相關文章
相關標籤/搜索