Lua 协程 + 过滤器实现生产者和消费者

简介: 笔记

1.png

实现


#!/usr/local/bin/lua
function send(x) 
    coroutine.yield(x)
end
--[[
-- 生产者
--      创建一个coroutine,生产、停止生产、发送商品
--]]
function producer() 
    return coroutine.create(function() 
        while true do 
            local x = io.read() -- 生产商品
            send(x) -- 停止生产、返回商品
        end 
    end) 
end
function receive(prod) 
    local status, value = coroutine.resume(prod)
    return value
end
function filter(prod) 
    return coroutine.create(function() 
        for line = 1, math.huge do 
            local x = receive(prod) 
            x = string.format("%5d %s", line, x)
            send(x)
        end
    end)
end
--[[
-- 消费者一直循环,当需要消费就唤醒生产者
--]]
function consumer(prod) 
    while true do 
        local x = receive(prod) -- filter coroutine
        io.write(x, "\n")
    end
end 
consumer(filter(producer()))

输出


lua 
  1 lua
c++
  2 c++
py
  3 py
• 1
• 2
• 3
• 4
• 5
• 6


结语


2.jpg

Lua还在精进中,期待您的关注~~

相关文章
|
C# Python
[√]lua 协程
[√]lua 协程
95 1
|
7月前
Lua语法(四)——协程
Lua语法(四)——协程
79 0
【Lua】协程(Coroutine)
【Lua】协程(Coroutine)
127 0
lua语言——协同程序(协程)
lua语言——协同程序(协程)
150 0
|
Python
Python编程:Coroutine协程之生产者消费者模型
Python编程:Coroutine协程之生产者消费者模型
176 0
Lua协同程序(协程)
Lua协同程序(协程)
349 0
Lua协同程序(协程)
|
应用服务中间件
LUA 协程 Coroutine
协程 Coroutine 协程(coroutine)并不是 Lua 独有的概念,如果让我用一句话概括,那么大概就是:一种能够在运行途中主动中断,并且能够从中断处恢复运行的特殊函数。(嗯,其实不是函数。
2573 0
|
关系型数据库 MySQL C++
利用LUA协程实现FUTURE模式
1. Future模式: 参见http://www.cnblogs.com/zhiranok/archive/2011/03/26/Future_Pattern.html 使用future的好处是即利用了异步的并行能力,又保证主逻辑串行执行,保持简单。
1284 0