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
- Lua - 10
- lua学习笔记10:lua简单命令行
- ubuntu11.10安装Lua
- lua脚本学习10
- LUA
- Lua
- LUA
- lua
- Lua
- lua
- lua
- lua
- lua
- lua
- lua
- lua
- Lua
- lua
- 用MyEclipse10.0开发基于JAX-WS的Web Service实例
- Android换页指示器TabIndicator
- BCGPFormView嵌入左侧显示属性页,并且同窗口等比例缩放,属性页添加图表随窗口尺寸变化而变化
- js 校验
- Spring中@Transactional事务回滚实例及源码
- Lua - 10
- golang 设置代理
- 分别在Windows与Ubuntu系统下在C程序中打开选择对话框
- 微信样式库weui使用教程button(2)
- 2016.11.11 machine learning
- javascript: Promise
- [绍棠] iOS线程介绍 NSThread, NSOperation, GCD
- iiOS判断身份证号码是否正确
- 用HOSTS 解决近期github访问不正常的问题