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还在精进中,期待您的关注~~

相关文章
|
12月前
|
C# Python
[√]lua 协程
[√]lua 协程
67 1
|
3月前
Lua语法(四)——协程
Lua语法(四)——协程
41 0
【Lua】协程(Coroutine)
【Lua】协程(Coroutine)
99 0
lua语言——协同程序(协程)
lua语言——协同程序(协程)
135 0
|
Python
Python编程:Coroutine协程之生产者消费者模型
Python编程:Coroutine协程之生产者消费者模型
140 0
Lua协同程序(协程)
Lua协同程序(协程)
330 0
Lua协同程序(协程)
|
应用服务中间件
LUA 协程 Coroutine
协程 Coroutine 协程(coroutine)并不是 Lua 独有的概念,如果让我用一句话概括,那么大概就是:一种能够在运行途中主动中断,并且能够从中断处恢复运行的特殊函数。(嗯,其实不是函数。
2547 0
|
机器学习/深度学习 人工智能
Lua 协程coroutine
  协程和一般多线程的区别是,一般多线程由系统决定该哪个线程执行,是抢占式的,而协程是由每个线程自己决定自己什么时候不执行,并把执行权主动交给下一个线程。 协程是用户空间线程,操作系统其存在一无所知,所以需要用户自己去做调度,用来执行协作式多任务非常合适。
1496 0