`

lua 协程(coroutine)

 
阅读更多
local function f(a)
  local thread = coroutine.running()
  ngx.say("status:",coroutine.status(thread))
  ngx.say("1")
  coroutine.yield()
  ngx.say("2")
  coroutine.yield()
end

local function ff(a)
  ngx.say("ff:",a)
end

local curr = coroutine.create(f)
ngx.say("return type(create()):",type(curr))

ngx.say("status:",coroutine.status(curr))
ngx.say("resume 1")
coroutine.resume(curr)
ngx.say("status:",coroutine.status(curr))

ngx.say("resume 2")
coroutine.resume(curr)

--和create类似,返回函数用起来方便一些,但不返回错误码,无法检测运行时错误
local wrap_fun = coroutine.wrap(ff)
ngx.say("return type(wrap()):",type(wrap_fun))
wrap_fun(3)


return type(create()):thread
status:suspended
resume 1
status:running
1
status:suspended
resume 2
2
return type(wrap()):function
ff:3



co = coroutine.create(function ()
  print("hello")
end)
print(co)
print(coroutine.status(co))
coroutine.resume(co)
print(coroutine.status(co))

function test_loop()
  for i=1,3 do
    print(coroutine.status(co))
    print(i)
    coroutine.yield()
  end
end

co = coroutine.create(test_loop)
coroutine.resume(co)
coroutine.resume(co) 

thread: 0x67a5ef60
suspended
hello
dead
running
1
running
2
分享到:
评论

相关推荐

    Lua协程(coroutine)程序运行分析

    Lua 协程(Coroutine)是轻量级的并发机制,它们提供了一种方式来暂停和恢复函数执行,而无需线程上下文切换的开销。在 Lua 中,协程是通过 `coroutine` 库提供的,它包含 `create`, `resume`, `yield` 和 `status` ...

    testco.zip_lua coroutine

    标题中的“testco.zip_lua coroutine”表明这是一个关于Lua协程(coroutine)的测试压缩包,可能包含了用于演示或教学的代码示例。描述中提到的“test for lua coroutine and linux makecontext”揭示了测试的两个...

    Lua的协程(coroutine)简介

    下面将详细介绍Lua协程的创建、状态以及`yield`函数的使用。 ### 协程的创建 在Lua中,我们使用`coroutine.create`函数来创建一个协程。这个函数接受一个函数作为参数,这个函数将成为协程的主体。例如: ```lua ...

    Lua_Coroutine

    Lua Coroutine,协程详解,lua 基本础,The Programming Language Lua

    LuaAsio:基于Boost.Asio和Lua协程的用于LuaJIT的简单透明的非阻塞TCP IO

    LuaJIT的协程(coroutine)功能是LuaAsio的关键所在。协程是一种轻量级的并发机制,它们不像线程那样需要上下文切换的开销,可以在单线程环境中实现协作式多任务。 LuaAsio通过将Boost.Asio的异步操作与LuaJIT的...

    AI luaDemo

    在AI系统中,lua协程(coroutine)是实现异步和并发执行的关键工具。 lua协程是lua中的一种轻量级线程,它们不像传统的线程那样需要系统级别的调度,而是由用户代码控制其执行流程。协程可以暂停和恢复执行,这使得...

    coroutine:具有固定大小堆栈的非对称协程(类似 lua)

    协程 具有固定大小堆栈的非对称协程(类似 lua) 通过使用“ucontext”机制,堆栈大小在源代码中固定为 64KB,您可以在其中修改它。 现在支持linux(32&64)和win32,x86下测试。

    Lua 基础教程(十六)协程.pdf

    ### Lua基础教程(十六)协程详解 #### 协程概念 协程是Lua语言中一个重要的编程特性,它提供了一种控制程序执行流程的方法。与传统的子程序调用不同,协程支持程序间的协作执行,允许多个执行流程以受控的方式交替...

    Lua Programming Gems 英文版 pdf,高清

    6. **并发与协程**:Lua的协程(coroutine)提供了一种轻量级的并发模型,使得在单线程环境中实现并发变得简单。书中会详细介绍协程的工作原理和应用实例。 7. **嵌入与扩展**:Lua的设计初衷就是作为嵌入式脚本...

    nginx实战-基于lua语言

    1. **异步I/O**:Lua的coroutine(协程)配合Nginx的事件模型,可以实现非阻塞的I/O操作,例如异步访问数据库。 2. **Lua库集成**:通过luarocks安装第三方Lua库,如lua-cjson用于JSON操作,lua-resty-http进行HTTP...

    lua程序设计及lua中文手册

    通过深入学习《Lua中文手册》,你可以掌握Lua的高级特性,如元编程、协程(coroutine)以及对C语言的接口(C API)进行扩展,进一步提升你的编程能力。 总结,Lua是一种强大的脚本语言,适用于游戏开发、自动化任务...

    Lua之协同程序coroutine代码实例

    Lua是一门简单而强大的轻量级脚本语言,它采用了协程(coroutine)这种高级特性来支持协作式的多任务处理。在多线程编程中,协程为需要频繁切换上下文的场景提供了一种更为经济的并发机制。Lua的协程库是对协作式多...

    Lua在Nginx中的应用

    由于Lua协程的轻量级特性,它能够大幅降低系统资源消耗,尤其适合用在高并发的网络服务中。 在实际的应用中,OpenResty和Lua的结合对于Web开发人员来说是一个极大的福音。它不仅提高了Nginx的动态性、灵活性和功能...

    跑马灯抽奖Lua.zip

    5. **Lua的事件驱动编程**:跑马灯效果通常涉及到定时更新,这在Lua中可以通过定时器或者协程(coroutine)实现。定时器可以设定一个时间间隔后执行特定的函数,而协程则可以在执行过程中暂停和恢复,这对于创建非...

    Lua Programming Gems 高清

    虽然Lua自身并不直接支持多线程,但可以通过协程(coroutine)来实现轻量级的并发。协程允许在单个线程内实现多任务切换,这对于某些场景下的并行处理非常有用。 最后,读者还能学到如何使用Lua进行游戏开发。Lua因...

    Lua经典编程书籍三本

    在第二版中,你将深入到Lua的高级特性,如元表、协程(coroutine)以及C语言扩展等方面。元表是Lua实现动态类型和元编程的关键,而协程则提供了轻量级并发的能力。此外,通过学习C语言扩展,你可以了解如何将C/C++...

    LUA编程(programming in lua).pdf

    10. **协程(Coroutine)**:LUA支持轻量级的并发模型——协程。协程可以理解为合作式的线程,它们在单个线程中交替执行,提供了异步编程的能力。 通过阅读《LUA编程(programming in lua).pdf》,开发者不仅能了解LUA...

    lua学习源码.zip

    6. **13_协程.lua**:Lua的协程(coroutine)是一种轻量级的线程,可以在运行时切换,而不会丢失上下文。协程通过coroutine.create、coroutine.resume、coroutine.yield和coroutine.status等函数实现协同多任务。 7...

    lua5.0的实现原理剖析

    4. 协程的加入:Lua 5.0 添加了协程(Coroutine)的概念,这是一种轻量级的并发模型,允许程序在不同执行流之间切换。尽管协程的概念并不新颖,但Lua 5.0 的实现使得协程易于理解和使用,有助于提升复杂程序的并行性...

    在Lua中使用线程更新UI

    在Lua中,`coroutine.create`用于创建一个协程,`coroutine.resume`用于恢复并执行协程,`coroutine.yield`用于暂停当前协程并返回控制权。 2. **C#多线程**:C#作为.NET框架的一部分,提供了丰富的多线程支持,如`...

Global site tag (gtag.js) - Google Analytics