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

相关文章
|
5月前
|
C# Python
[√]lua 协程
[√]lua 协程
36 1
|
11月前
Lua笔记协程
Lua笔记协程
49 0
|
11月前
【Lua】协程(Coroutine)
【Lua】协程(Coroutine)
62 0
lua语言——协同程序(协程)
lua语言——协同程序(协程)
105 0
Lua协同程序(协程)
Lua协同程序(协程)
301 0
Lua协同程序(协程)
|
应用服务中间件
LUA 协程 Coroutine
协程 Coroutine 协程(coroutine)并不是 Lua 独有的概念,如果让我用一句话概括,那么大概就是:一种能够在运行途中主动中断,并且能够从中断处恢复运行的特殊函数。(嗯,其实不是函数。
2501 0
|
机器学习/深度学习 人工智能
Lua 协程coroutine
  协程和一般多线程的区别是,一般多线程由系统决定该哪个线程执行,是抢占式的,而协程是由每个线程自己决定自己什么时候不执行,并把执行权主动交给下一个线程。 协程是用户空间线程,操作系统其存在一无所知,所以需要用户自己去做调度,用来执行协作式多任务非常合适。
1467 0
|
关系型数据库 MySQL C++
利用LUA协程实现FUTURE模式
1. Future模式: 参见http://www.cnblogs.com/zhiranok/archive/2011/03/26/Future_Pattern.html 使用future的好处是即利用了异步的并行能力,又保证主逻辑串行执行,保持简单。
1210 0
|
1月前
|
并行计算 调度 开发者
深入浅出Python协程:提升你的异步编程效率
在当今快速发展的软件开发领域,异步编程已成为提高程序性能和用户体验的关键技术。Python,作为一门广泛使用的高级编程语言,其协程(Coroutine)功能为开发者提供了强大的异步编程工具。本文将从协程的基本概念入手,通过实例深入浅出地讲解如何在Python中有效利用协程来提升异步编程的效率和可读性。我们将探讨协程的工作原理、与传统多线程/多进程相比的优势,以及如何在实际项目中应用协程来解决复杂的并发问题。通过本文的学习,读者将能够掌握Python协程的核心知识,为构建高效、可维护的异步应用奠定坚实基础。