lu协程练习
生产者和消费者问题:
当协程调用yield时,从一个悬而未决的resume中返回。
简单的协程练习:
function receive()
local status,value = coroutine.resume(producer)
return status,value
end function send(x)
coroutine.yield(x)
end producer = coroutine.create(
function()
local x =
while true do
x = x+
if(x > ) then
break
end
send(x)
end
end) local status,res
repeat
status,res = receive()
print(status, res)
until(nil == res)
输出:
>lua -e "io.stdout:setvbuf 'no'" "1.lua"
true 1
true 2
true 3
true 4
true 5
true 6
true 7
true 8
true 9
true 10
true nil
>Exit code: 0
这种模式被称为消费者驱动模式。
过滤器filter是一种位于生产者和消费者之间的处理函数,用于对数据进行变换。它既是一个生产者又是消费者,他唤醒生产者产生new value,然后又将变换后的值传给消费者。
表示自己写的代码,出问题了:
function receive(prod)
local value = coroutine.resume(prod)
return value
end function send(x)
coroutine.yield(x)
end x =
function producer()
return coroutine.create(
function()
x = x +
print(sting.format("producer:%d.\n",x))
return x
end)
end function filter(prod)
return coroutine.create(
function()
local x = receive(prod)
x = string.format("Add:%d",x)
send(x)
end
)
end function consumer(prod)
repeat
res = receive(prod)
print(res)
until (nil == res)
end p = producer()
f = filter(p)
print(x)
consumer(f)
晚上回去看看怎么回事。
lu协程练习的更多相关文章
- C/C++使用Lu脚本协程
欢迎访问Lu程序设计 C/C++使用Lu脚本协程 1 说明 要演示本文的例子,你必须下载Lu32脚本系统.本文的例子需要lu32.dll.lu32.lib.C格式的头文件lu32.h,相信你会找到并正 ...
- tbox新增stackless协程支持
tbox之前提供的stackfull协程库,虽然切换效率已经非常高了,但是由于每个协程都需要维护一个独立的堆栈, 内存空间利用率不是很高,在并发量非常大的时候,内存使用量会相当大. 之前考虑过采用st ...
- tbox协程使用之切换与等待
tbox的协程实现,是stackfull模式的,需要指定独立堆栈和协程函数,目前暂时还不能像golang那样实现堆栈的动态增长,之后会对其进行支持. 目前提供下面一些功能特性: 1. 提供yield切 ...
- 记boost协程切换bug发现和分析
在分析了各大开源协程库实现后,最终选择参考boost.context的汇编实现,来写tbox的切换内核. 在这过程中,我对boost各个架构平台下的context切换,都进行了分析和测试. 在maco ...
- Python(八)进程、线程、协程篇
本章内容: 线程(线程锁.threading.Event.queue 队列.生产者消费者模型.自定义线程池) 进程(数据共享.进程池) 协程 线程 Threading用于提供线程相关的操作.线程是应用 ...
- Lua的协程和协程库详解
我们首先介绍一下什么是协程.然后详细介绍一下coroutine库,然后介绍一下协程的简单用法,最后介绍一下协程的复杂用法. 一.协程是什么? (1)线程 首先复习一下多线程.我们都知道线程——Thre ...
- 协程--gevent模块(单线程高并发)
先恶补一下知识点,上节回顾 上下文切换:当CPU从执行一个线程切换到执行另外一个线程的时候,它需要先存储当前线程的本地的数据,程序指针等,然后载入另一个线程的本地数据,程序指针等,最后才开始执行.这种 ...
- Python 【第五章】:线程、进程和协程
Python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. #!/usr/bin/env python # -*- coding:utf-8 -*- import t ...
- 进击的Python【第十章】:Python的socket高级应用(多进程,协程与异步)
Python的socket高级应用(多进程,协程与异步)
随机推荐
- ORACLE中union/union all/Intersect/Minus用法
Union,对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序: Union All,对两个结果集进行并集操作,包括重复行,不进行排序: Intersect,对两个结果集进行交集操作,不包 ...
- 主成分分析(PCA)原理及推导
原文:http://blog.csdn.net/zhongkejingwang/article/details/42264479 什么是PCA? 在数据挖掘或者图像处理等领域经常会用到主成分分析,这样 ...
- C#.NET常见问题(FAQ)-如何使用变量访问控件属性
不管哪种类型的控件,可以用下面这种强制转换和Controls.Find的方法来读写控件的属性 //我在界面上做了三个picturebox控件 PictureBox p; //注意索引必须从1开始,并且 ...
- URAL 1224. Spiral (规律)
1224. Spiral Time limit: 1.0 second Memory limit: 64 MB A brand new sapper robot is able to neutrali ...
- 剑指offer 高速排序
高速排序一般的写法.教科书上非常具体,这里介绍作者的写法. 程序例如以下: #include<iostream> #include<stack> using namespace ...
- Navicat标识为灰
Navicat Premium作为一种通用数据管理工具,非常受迎接.最近,又遇到一个小问题.即为了实现自增,需要设置主键标识,而在Navicat中发现其为灰色,不可用. 原因:Navicat不允许设置 ...
- Windows版Mycat结合mysql安装配置+水平切分(转载)
来源:https://segmentfault.com/a/1190000009495748 参考文档:Mycat安装与使用 环境 环境 版本 windows 10 java 1.8.0 mysql ...
- vCenter Server Virtual Appliance features and benefits
http://vmwire.com/tag/vcsa/ Installed on SUSE Linux Enterprise Server 11 x64. OVF when deployed is c ...
- VCAP5-DCA Objective 1.3 – Configure and Manage Complex Multipathing and PSA Plug-ins
http://virtuallyhyper.com/2012/10/vcap5-dca-objective-1-3-configure-and-manage-complex-multipathing- ...
- 利用RTMFP开发P2P应用
利用RTMFP开发P2P应用 flash10使用RTMFP 开发点对点P2P应用 通过Stratus 服务器在Flash Player中使用RTMFP 开发 点对点应用 Adobe Flash Pla ...