很久没记录笔记了,还是养成不了记录的习惯

下面是来自 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协程的一个例子的更多相关文章

  1. 关于python协程的一个例子的学习

    例子来自https://blog.tonyseek.com/post/event-manage-with-greenlet/ 加了一些注释看懂了: 注释中的数字表示执行的顺序,这个简单的例子用到了py ...

  2. 大富翁开发日记:一、使用巨型lua协程

    一个大胆的尝试:使用巨型lua协程来表示整个“一局”流程. lua协程是一个很另类的功能,有并发的影子但又不是真的并发,所以真正拿它来做大功能框架的范例不多,通常用于一些小型trick式设计.但这次我 ...

  3. Lua 协程coroutine

    协程和一般多线程的区别是,一般多线程由系统决定该哪个线程执行,是抢占式的,而协程是由每个线程自己决定自己什么时候不执行,并把执行权主动交给下一个线程. 协程是用户空间线程,操作系统其存在一无所知,所以 ...

  4. [转]-Lua协程的实现

    协程是个很好的东西,它能做的事情与线程相似,区别在于:协程是使用者可控的,有API给使用者来暂停和继续执行,而线程由操作系统内核控制:另 外,协程也更加轻量级.这样,在遇到某些可能阻塞的操作时,可以使 ...

  5. LUA 协程

    LUA协程和C#协程非常相似,功能与用法更强大.基础用法: coco = coroutine.create(function (a,b) print("resume args:". ...

  6. lua协程实现

    协程是个很好的东西,它能做的事情与线程相似,区别在于:协程是使用者可控的,有API给使用者来暂停和继续执行,而线程由操作系统内核控制:另外,协程也更加轻量级.这样,在遇到某些可能阻塞的操作时,可以使用 ...

  7. Lua 协程和线程区别

    协程就是协程,不是线程. CPU执行单位是线程,不是什么协程. 协程,是同步执行,不是并行,只是切了一个上下文了,为你保存原来的上下文而已. 切到第二个协程时,原来的协程处于挂起状态. 这个特指lua ...

  8. Openresty Lua协程调度机制

    写在前面 OpenResty(后面简称:OR)是一个基于Nginx和Lua的高性能Web平台,它内部集成大量的Lua API以及第三方模块,可以利用它快速搭建支持高并发.极具动态性和扩展性的Web应用 ...

  9. lua 协程的理解

    参考链接: http://www.cnblogs.com/zrtqsk/p/4374360.html 对例子的自我理解: -- 协程的理解 -- co 是协程的内容,类似函数内容, 通过yield 将 ...

随机推荐

  1. JUC之认识ConcurrentHashMap

    ConcurrentHashMap为什么广泛使用?回答这个问题之前先要回忆下几个基本的概念涉及hash的几个数据结构及锁优化(关于锁优化参考JMM之Java中锁概念的分类总结 - 池塘里洗澡的鸭子 - ...

  2. 创建jsp页面出现The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path错误

    原因未添加tomcat服务器 第一步: 第二步:

  3. 分析HTTP请求以降低HTTP走私攻击HTTP数据接收不同步攻击的风险

    写在前面的话 HTTP/1.1自1991年至2014年,已经走过了一段很长的发展历程: HTTP/0.9– 1991 HTTP/1.0– 1996 HTTP/1.1 RFC 2068– 1997 RF ...

  4. selenium+python 处理只读日期控件的2种方法

    前言 有时候测试过程中会遇到日期控件场景,这时候需要特殊处理,下文以12306网站为例 1.处理方式 通常是通过js去除只读属性(2种方法),然后通过send_keys重新写值 from time i ...

  5. 分布式缓存NCache使用

    NCache作为缓存优点币Redis有优势,但是收费的所以选用的不多吧.下面简单实操一下: 首先官网下载组件NCache Download Center (alachisoft.com),这里选择企业 ...

  6. Excel入门简单,想要进阶实属不易?推荐这个数据分析工具

    大数据时代,数据分析在我们的日常生活和工作中应用越来越广泛,不管是公司的行政.人事.销售.运营还是专业的数据分析师,都经常需要通过数据来发现业务问题,因此数据分析正逐渐成为职场通用能力. 说到数据分析 ...

  7. 【C# 线程】内存屏障 MemoryBarrier

    背景 同步基元分为用户模式和内核模式 用户模式:Iterlocked.Exchange(互锁).SpinLocked(自旋锁).易变构造(volatile关键字.volatile类.Thread.Vo ...

  8. Python3对接华三CAS平台Api获取虚拟机监控信息-渐入佳境

    --时间:2021年2月3日 --作者:飞翔的小胖猪 说明 使用python对接华三CAS虚拟化平台,通过厂商提供的api接口获取每个集群下所有虚拟机的监控信息,并保存数据在本地的mariadb数据库 ...

  9. JZ-050-数组中重复的数字

    数组中重复的数字 题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中 第一个重复的数字. 例 ...

  10. ASP.NET Core 6框架揭秘实例演示[19]:数据加解密与哈希

    数据保护(Data Protection)框架旨在解决数据在传输与持久化存储过程中的一致性(Integrity)和机密性(confidentiality)问题,前者用于检验接收到的数据是否经过篡改,后 ...