Lua协程的一个例子
很久没记录笔记了,还是养成不了记录的习惯
下面是来自 programming in lua的一个协程的例(生产者与用户的例子)
帖代码,慢慢理解
-- Programming in Lua Coroutine(协程)
--[[
coroutine.create
coroutine.resume
coroutine.running
coroutine.status
coroutine.wrap
coroutine.yield
--]]
--管道和过滤
--生产者与用户的例子
--[[
************************************************
函数 :send
用途 :暂停线程
参数 :发送给下一次恢复的线程的数据
返回值:无
************************************************
--]]
function send(x)
coroutine.yield(x)
end
--[[
************************************************
函数 :receive
用途 :从线程中检索数据
参数 :(function)需要被检索的线程
返回值:(object)从上次暂停的线程中获取的数据
************************************************
--]]
function receive(co)
local status, value = coroutine.resume(co)
return value
end
--[[
************************************************
函数:producer
功能:不断生产值的函数(即生产者)
参数:无
返回值:线程
************************************************
--]]
function producer()
return coroutine.create(
function()
while true do
local x = io.read()
--print(x)
send(x)
end
end)
end
--[[
************************************************
函数:fitler
功能:改造由producer产生的值(即加工器)
参数:线程(生产者)
返回值:线程(经过加工的线程)
************************************************
--]]
function fitler(co)
return coroutine.create(function()
--math.huge是个无穷大的数
for line=1, math.huge do
local x = receive(co)
--被加工后的数据
x = string.format("%5d %s",line, x)
send(x)
end
end)
end
--[[
************************************************
函数:consumer
功能:不断检索值的函数(用户)
参数:线程(生产者)
返回值:无
************************************************
--]]
function consumer(co)
while true do
local x = receive(co)
--print(x)
io.write(x, "\n")
end
end
--流程:生产》加工》用户使用
--生产
p = producer()
--加工
f = fitler(p)
--用户使用
consumer(f)
Lua协程的一个例子的更多相关文章
- 关于python协程的一个例子的学习
例子来自https://blog.tonyseek.com/post/event-manage-with-greenlet/ 加了一些注释看懂了: 注释中的数字表示执行的顺序,这个简单的例子用到了py ...
- 大富翁开发日记:一、使用巨型lua协程
一个大胆的尝试:使用巨型lua协程来表示整个“一局”流程. lua协程是一个很另类的功能,有并发的影子但又不是真的并发,所以真正拿它来做大功能框架的范例不多,通常用于一些小型trick式设计.但这次我 ...
- Lua 协程coroutine
协程和一般多线程的区别是,一般多线程由系统决定该哪个线程执行,是抢占式的,而协程是由每个线程自己决定自己什么时候不执行,并把执行权主动交给下一个线程. 协程是用户空间线程,操作系统其存在一无所知,所以 ...
- [转]-Lua协程的实现
协程是个很好的东西,它能做的事情与线程相似,区别在于:协程是使用者可控的,有API给使用者来暂停和继续执行,而线程由操作系统内核控制:另 外,协程也更加轻量级.这样,在遇到某些可能阻塞的操作时,可以使 ...
- LUA 协程
LUA协程和C#协程非常相似,功能与用法更强大.基础用法: coco = coroutine.create(function (a,b) print("resume args:". ...
- lua协程实现
协程是个很好的东西,它能做的事情与线程相似,区别在于:协程是使用者可控的,有API给使用者来暂停和继续执行,而线程由操作系统内核控制:另外,协程也更加轻量级.这样,在遇到某些可能阻塞的操作时,可以使用 ...
- Lua 协程和线程区别
协程就是协程,不是线程. CPU执行单位是线程,不是什么协程. 协程,是同步执行,不是并行,只是切了一个上下文了,为你保存原来的上下文而已. 切到第二个协程时,原来的协程处于挂起状态. 这个特指lua ...
- Openresty Lua协程调度机制
写在前面 OpenResty(后面简称:OR)是一个基于Nginx和Lua的高性能Web平台,它内部集成大量的Lua API以及第三方模块,可以利用它快速搭建支持高并发.极具动态性和扩展性的Web应用 ...
- lua 协程的理解
参考链接: http://www.cnblogs.com/zrtqsk/p/4374360.html 对例子的自我理解: -- 协程的理解 -- co 是协程的内容,类似函数内容, 通过yield 将 ...
随机推荐
- Cobbler 批量安装操作系统
文章目录 环境准备 部署cobbler cobbler语法检查以及排错 问题1 问题2 问题3 问题4 问题5 问题6 问题7 问题8 修改dhcp模板 重启服务,再次检查 镜像配置 镜像导入 kic ...
- html-拖拽释放(Drag and drop) API
前言 本文总结一下html5 新增的元素拖拽功能的使用. 正文 1.H5之前的拖拽功能实现方法 JS 拖 拖 拽 功 能 的 实 现首先是三个事件,分别是 mousedown,mousemove,mo ...
- Linux命令行模式下安装VMware Tools详细步骤
在Linux命令行模式安装VMware Tools 方法/步骤1: 首先启动CentOS 7,在VMware中点击上方"VM",点击"Install VMware Too ...
- 『无为则无心』Python面向对象 — 54、重写和super()函数
目录 1.重写 2.super()函数 方式一 方式二 __mro__内置类属性说明 1.重写 在子类中如果有和父类同名的方法,则通过子类实例去调用该方法时,会调用子类中的该方法而不是父类的方法,这个 ...
- .NET 6学习笔记(1)——通过FileStream实现不同进程对单一文件的同时读写
会写这篇纯属机缘巧合,虽然一直以来认为对单一文件的读.写操作是不冲突,可并行的,但实际并未实践过.正好有个UWP的程序要并行读取由Desktop Extension创建的文本,需要有个原型程序来验证, ...
- bugku-Web md5 collision writeup
访问题目链接,得到提示input a,而题目是md5 collision,md5碰撞.所以找一个md5是oe开头的值,get方式传参过去,PAYLOAD http://114.67.246.176:1 ...
- 人工智能进度好慢,呜呜呜 还是先来学python!!!!!!!二十三讲、二十四讲!
0:十转2 def my_bin(x): a ='' if x : a = my_bin(x//2) return a+str(x%2) else: a+='0b' return a print(my ...
- IPv6 OSPFv3路由协议测试——信而泰网络测试仪实操
关键词 IPv6; OSPFv3; OSPFv2. 前言:在网络部署中,动态路由协议是重要的组成部分.良好的路由协议,是保证网络可靠.稳定运行的基础.为了适应IPv6协议栈的变化,OSPFv3协议在保 ...
- 从数据分析系统总架构理解BI工具的价值所在
现如今,应用商业智能BI工具的企业是越来越多了,由此也可见企业对数据分析的重视.因此,掌握一定的数据分析知识对"打工人"来说是非常重要的.现在小编就来跟大家一起来了解一下商业智能 ...
- 案例二:shell脚本获取当前日期和时间及磁盘使情况
习题分析 本题有两个核心知识点: 1. 如何自动表示当天的日期 2. 磁盘使用情况 打印日期的命令为 date,示例命令如下: # date 2017 年 12 月 20 日 星期三 16:26:55 ...