Lua - 10

来源:互联网 发布:淘宝天猫优惠券采集 编辑:程序博客网 时间:2024/06/06 04:48

上面两篇讲到resume-yield的一个多例子的学习,下面以在这领域最经典的生产者消费者模式来讲述一下下面的学习

首先例子转自:http://blog.csdn.net/wzzfeitian/article/details/8832017,侵权必删哈

-- receive函数function receive (prod)      local status, value = coroutine.resume(prod)      return value  end  function send (x)      coroutine.yield(x)  end  -- producer函数function producer()      return coroutine.create(function ()          while true do              local x = io.read() -- produce new value              send(x)          end      end)  end  -- consumer函数      function consumer (prod)      while true do          local x = receive(prod) -- receive from producer          io.write(x, "\n") -- consume new value      end  end    p = producer()  consumer(p) 

相信很多人看了这个生产者-消费者模式都会一脸懵逼

连逻辑图都很难构建好,其实我们可以一步步做减法,将封装层变得更简易来看看究竟是什么回事

首先将consumer解除封装:



这个时候在终端测试,可以发现,正确无误


再来将producer解除封装:



这样,我们就将它的“真面目”,捣鼓出来了,其实就是嵌套一个无限的循环,不断生产不断消费而已~~


同样的解封装的原理和方式,并且去掉循环之后,我们可以将它解成更简单:



这样去反向理解是不是更好呢~~





0 0