`
mryufeng
  • 浏览: 981897 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

luacoco 增强lua的coroutine功能

    博客分类:
  • Lua
阅读更多
Coco is a small extension to get True C Coroutine semantics for Lua 5.1.

Coco is both available as a stand-alone release and integrated into LuaJIT.

The stand-alone release is a patchset against the standard Lua 5.1.3 distribution. There are no dependencies on LuaJIT. However LuaJIT depends on Coco to allow yielding for JIT compiled functions.

这个luacoco patch也是匠心独特 以最小的侵入修改让lua支持原生的coroutine,解除了原版的coroutine的几个限制:

    * Yield across all metamethods (not advised for __gc).
    * Yield across iterator functions (for x in func do).
    * Yield across callbacks (table.foreach(), dofile(), ...).
    * Yield across protected callbacks (pcall(), xpcall(), ...).
    * Yield from C functions and resume back to them.

在实现方面主要是利用以下几个macro来实现修改的:

/*
@@ LUAI_EXTRASPACE allows you to add user-specific data in a lua_State
@* (the data goes just *before* the lua_State pointer).
** CHANGE (define) this if you really need that. This value must be
** a multiple of the maximum alignment required for your machine.
*/
#define LUAI_EXTRASPACE 0


/*
@@ luai_userstate* allow user-specific actions on threads.
** CHANGE them if you defined LUAI_EXTRASPACE and need to do something
** extra when a thread is created/deleted/resumed/yielded.
*/
#define luai_userstateopen(L) ((void)L)
#define luai_userstateclose(L) ((void)L)
#define luai_userstatethread(L,L1) ((void)L)
#define luai_userstatefree(L) ((void)L)
#define luai_userstateresume(L,n) ((void)L)
#define luai_userstateyield(L,n) ((void)L)

再拜下萝卜神!!!
分享到:
评论

相关推荐

    testco.zip_lua coroutine

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

    Lua_Coroutine

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

    Lua协同程序coroutine的简介及优缺点

    Lua协同程序,或称为coroutine,是一种轻量级的并发机制,它在Lua编程语言中扮演着重要的角色。不同于线程,协同程序在概念上更接近于子程序,但它们允许非阻塞的暂停和恢复,使得在单线程环境中实现异步操作成为...

    LUA - coroutine

    The concept of a coroutine is one of the oldest proposals for a general control abstraction. It is attributed to Conway [Conway, 1963], who described coroutines as “subroutines who act as the master ...

    Python-openresty和lua多功能模板

    《Python与OpenResty结合:Lua多功能模板应用详解》 在现代Web开发中,Python以其强大的功能和易读性受到了广大开发者的喜爱。然而,在处理高性能、高并发的网络服务时,单靠Python可能力有未逮。这时,OpenResty的...

    lua脚本线程控制测试代码

    通过分析和运行这些脚本,我们可以进一步了解如何在Lua 5.1环境中有效地控制和测试多线程功能。 总之,Lua的Coroutine提供了一种有效的方式实现轻量级的并发,尽管不是真正的多线程,但在很多情况下足以满足并发...

    易语言lua的例子

    在易语言中集成Lua,可以利用Lua的灵活性和高效性来扩展易语言的功能。 这个压缩包文件包含了一些用于在易语言中调用Lua的资源和示例程序,让我们一一解析: 1. **Lua.lib**:这是一个易语言的库文件,它提供了与...

    Lua加载Dll库来扩展功能

    自己从C代码中扒出一点,只能用一点点功能。抛砖引玉吧。大师们发个全一点的代码吧。邮箱:shb_a@126.com 文件目录: lua53.dll LUA自带的 lualib.dll 自测试用的,仅有三个函数:lua_sleep-延时,showm-返回文本,...

    delphi调用lua脚本的一个例子

    在本文中,我们将深入探讨如何在Delphi编程环境中调用Lua脚本,以实现更灵活的逻辑处理和功能扩展。Delphi是一款强大的Object Pascal集成开发环境(IDE),而Lua则是一种轻量级、高效的脚本语言,常用于游戏开发和...

    基于Lua实现的脚本和服务器引擎Node-Lua.zip

    Node-Lua在下个版本将会提供以下新功能和特性: udp接口支持;tcp和udp socket在lua服务之间的迁移;在线服务热更新;在线服务调试;提供FreeBSD等环境下的编译和安装;提供基准测试版本;欢迎大家发现Node-Lua当中...

    LUAC脚本解密_luac解密在线_luac4加密_luac反编译_luac4解密工具_luac解密工具

    LUAC脚本是一种基于Lua语言的编译格式,它将Lua源代码编译成字节码,以便在 Lua 解释器上高效运行。LUAC(Lua Compiler)是Lua官方提供的编译器,它将源代码转换为这种优化的字节码,以提高执行速度。在游戏开发、...

    lua_stm32f4.rar_lua stm32_lua移植stm32_stm32 lua_stm32f407移植lua_st

    本文将详细探讨如何在STM32F407微控制器上移植并运行Lua,以及实现一些基本功能。 STM32F407是一款高性能的ARM Cortex-M4内核微控制器,具有浮点单元(FPU)和高速外设接口,适合于需要强大计算能力和实时响应的...

    LUAC反编译_LUC_lua反编译工具_luac_luac解密工具_Lua解密_

    Lua源代码是文本形式的,易于阅读和编写,但为了保护代码不被轻易篡改或盗用,开发者通常会将Lua代码编译成字节码(.lua.c文件或.luac文件)。"LUAC"就是Lua的官方编译器,它将Lua源代码转换为字节码,以提高执行...

    LUAC解密工具.zip_andlua解密工具_andlua解密软件_lua 4.2解密_luac转lua_lua解密工具

    "lua解密工具"则是一个广义的概念,涵盖了所有能处理Lua加密代码的工具,它们可能包含了解密、反混淆等功能,以帮助开发者调试或分析加密的Lua脚本。 总的来说,"LUAC解密工具.zip"提供的内容可能包括一个或多个能...

    Lua Programming Gems 高清

    学习如何使用C API编写lua库,可以极大地增强Lua的功能,使其适应各种应用场景。 书中还可能涉及错误处理、调试技巧以及性能优化。在Lua中,错误通常通过抛出和捕获异常来处理,而调试则可以通过内置的debug库来...

    所有版本LUA源码

    所有版本LUA源码 lua-5.3.5 lua-5.3.4 lua-5.3.3 lua-5.3.2 lua-5.3.1 lua-5.3.0 lua-5.2.4 lua-5.2.3 lua-5.2.2 lua-5.2.1 lua-5.2.0 lua-5.1.5 lua-5.1.4 lua-5.1.3 lua-5.1.2 lua-5.1.1 lua-5.1 lua-5.0.3 lua-...

    Lua中文编辑器luaEditor

    LuaEditor通常会提供诸如代码高亮、自动完成、错误检查、调试功能等,以帮助开发者更轻松地编写和管理Lua代码。它可能还包含对luac编译器的集成,使得用户可以直接在编辑器中编译和运行代码。 “中文”标签意味着...

    跑马灯抽奖Lua.zip

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

    LUA扩展支持库

    "LUA扩展支持库" 提供了对Lua功能的增强,使得开发者能够利用更丰富的功能来编写复杂的逻辑和应用。这个压缩包“lua扩展支持库静态版luashellfne”可能包含了用于扩展Lua功能的静态库文件,方便开发者将其集成到自己...

    Lua的协程(coroutine)简介

    总结来说,Lua的协程提供了一种轻量级的并发模型,通过`coroutine.create`、`coroutine.resume`和`coroutine.yield`的配合,可以在单线程环境中实现高效的多任务执行。协程的使用避免了线程切换的开销,简化了同步...

Global site tag (gtag.js) - Google Analytics