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”表明这是一个关于Lua协程(coroutine)的测试压缩包,可能包含了用于演示或教学的代码示例。描述中提到的“test for lua coroutine and linux makecontext”揭示了测试的两个...
Lua Coroutine,协程详解,lua 基本础,The Programming Language Lua
Lua协同程序,或称为coroutine,是一种轻量级的并发机制,它在Lua编程语言中扮演着重要的角色。不同于线程,协同程序在概念上更接近于子程序,但它们允许非阻塞的暂停和恢复,使得在单线程环境中实现异步操作成为...
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多功能模板应用详解》 在现代Web开发中,Python以其强大的功能和易读性受到了广大开发者的喜爱。然而,在处理高性能、高并发的网络服务时,单靠Python可能力有未逮。这时,OpenResty的...
通过分析和运行这些脚本,我们可以进一步了解如何在Lua 5.1环境中有效地控制和测试多线程功能。 总之,Lua的Coroutine提供了一种有效的方式实现轻量级的并发,尽管不是真正的多线程,但在很多情况下足以满足并发...
在易语言中集成Lua,可以利用Lua的灵活性和高效性来扩展易语言的功能。 这个压缩包文件包含了一些用于在易语言中调用Lua的资源和示例程序,让我们一一解析: 1. **Lua.lib**:这是一个易语言的库文件,它提供了与...
自己从C代码中扒出一点,只能用一点点功能。抛砖引玉吧。大师们发个全一点的代码吧。邮箱:shb_a@126.com 文件目录: lua53.dll LUA自带的 lualib.dll 自测试用的,仅有三个函数:lua_sleep-延时,showm-返回文本,...
在本文中,我们将深入探讨如何在Delphi编程环境中调用Lua脚本,以实现更灵活的逻辑处理和功能扩展。Delphi是一款强大的Object Pascal集成开发环境(IDE),而Lua则是一种轻量级、高效的脚本语言,常用于游戏开发和...
Node-Lua在下个版本将会提供以下新功能和特性: udp接口支持;tcp和udp socket在lua服务之间的迁移;在线服务热更新;在线服务调试;提供FreeBSD等环境下的编译和安装;提供基准测试版本;欢迎大家发现Node-Lua当中...
LUAC脚本是一种基于Lua语言的编译格式,它将Lua源代码编译成字节码,以便在 Lua 解释器上高效运行。LUAC(Lua Compiler)是Lua官方提供的编译器,它将源代码转换为这种优化的字节码,以提高执行速度。在游戏开发、...
本文将详细探讨如何在STM32F407微控制器上移植并运行Lua,以及实现一些基本功能。 STM32F407是一款高性能的ARM Cortex-M4内核微控制器,具有浮点单元(FPU)和高速外设接口,适合于需要强大计算能力和实时响应的...
Lua源代码是文本形式的,易于阅读和编写,但为了保护代码不被轻易篡改或盗用,开发者通常会将Lua代码编译成字节码(.lua.c文件或.luac文件)。"LUAC"就是Lua的官方编译器,它将Lua源代码转换为字节码,以提高执行...
"lua解密工具"则是一个广义的概念,涵盖了所有能处理Lua加密代码的工具,它们可能包含了解密、反混淆等功能,以帮助开发者调试或分析加密的Lua脚本。 总的来说,"LUAC解密工具.zip"提供的内容可能包括一个或多个能...
学习如何使用C API编写lua库,可以极大地增强Lua的功能,使其适应各种应用场景。 书中还可能涉及错误处理、调试技巧以及性能优化。在Lua中,错误通常通过抛出和捕获异常来处理,而调试则可以通过内置的debug库来...
所有版本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-...
LuaEditor通常会提供诸如代码高亮、自动完成、错误检查、调试功能等,以帮助开发者更轻松地编写和管理Lua代码。它可能还包含对luac编译器的集成,使得用户可以直接在编辑器中编译和运行代码。 “中文”标签意味着...
5. **Lua的事件驱动编程**:跑马灯效果通常涉及到定时更新,这在Lua中可以通过定时器或者协程(coroutine)实现。定时器可以设定一个时间间隔后执行特定的函数,而协程则可以在执行过程中暂停和恢复,这对于创建非...
"LUA扩展支持库" 提供了对Lua功能的增强,使得开发者能够利用更丰富的功能来编写复杂的逻辑和应用。这个压缩包“lua扩展支持库静态版luashellfne”可能包含了用于扩展Lua功能的静态库文件,方便开发者将其集成到自己...
总结来说,Lua的协程提供了一种轻量级的并发模型,通过`coroutine.create`、`coroutine.resume`和`coroutine.yield`的配合,可以在单线程环境中实现高效的多任务执行。协程的使用避免了线程切换的开销,简化了同步...