`
whitesock
  • 浏览: 483682 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Symmentric Coroutine in Lua

    博客分类:
  • Lua
阅读更多

1  Symmetric Coroutine

    Lua支持asymmetric coroutine。对于symmetric coroutine,名为Coroutines in Lua的一篇论文,提供了如下的解决方案:

coro = {}
coro.main = function() end
coro.current = coro.main

function coro.create(f) 
  return coroutine.wrap(function(val) return nil, f(val) end)
end

function coro.transfer(k, val)
  if coro.current ~= coro.main then
    return coroutine.yield(k, val)
  else
    while k do
      coro.current = k
      if k == coro.main then
        return val
      end
      k, val = k(val)
    end
    error("coroutine ended without transfering control...")
  end
end

    代码虽然不长,但是十分精致。通过yield/resume,以及一个dipatching循环,巧妙地实现了symmetric coroutine。此外在Revisiting Coroutines论文中,甚至用asymmetric coroutine实现了one-shot continuation。

 

2 Reference

Coroutines in Lua Ana L´ucia de Moura , Noemi Rodriguez , Roberto Ierusalimschy
Revisiting Coroutines Ana L´ucia de Moura and Roberto Ierusalimschy

分享到:
评论

相关推荐

    Programming In Lua 中文版PDF高清

    - **简述**:讲解了Lua中的协同程序(coroutine)的概念和使用方法。 - **知识点**: - 协同程序的基础知识。 - 创建和控制协同程序的API。 - 协同程序在实际项目中的应用案例。 **第10章 完整示例** - **简述**...

    Programming in Lua Second Edition

    8. **协同程序与事件驱动**:Lua的协同程序(coroutine)是一种轻量级的并发模型,可用于实现非阻塞的事件驱动编程。 9. **标准库介绍**:书中会详细讨论Lua的标准库,包括字符串处理、数学运算、操作系统接口、...

    Programming In Lua

    8. **高级主题**:如线程、协程(coroutine)以及Lua的内存管理等深入话题。 通过阅读这本书,读者不仅可以掌握Lua的基本语法,还能理解其背后的原理和设计理念,从而在实践中更加自如地运用Lua进行开发。无论你是...

    LUA编程(programming in lua).pdf

    《LUA编程(programming in lua).pdf》这本书深入介绍了LUA这一轻量级脚本语言的各个方面,旨在帮助读者掌握LUA编程的核心概念和技术。LUA以其简洁的语法、高效性能和灵活性在游戏开发、系统配置、嵌入式系统等多个...

    Lua程序设计 Programming in Lua

    《Programming in Lua》是关于Lua编程语言的一本权威指南,由巴西坎皮纳斯大学的Pedro Malvino和Tiago铁木辛哥合著。这本书深入浅出地介绍了Lua语言的核心概念、语法以及最佳实践,旨在帮助开发者充分利用Lua的灵活...

    Program in LUA 2nd Edition.rar

    9.1 Coroutine Basics 73 9.2 Pipes and Filters 76 9.3 Coroutines as Iterators 79 9.4 Non-Preemptive Multithreading 81 10 Complete Examples 87 10.1 Data Description 87 10.2 Markov Chain Algorithm ...

    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

    Programming in Lua - 4th Edition.rar

    8. 高级主题:Lua的元编程能力、垃圾回收机制、线程与协程(coroutine)等内容,这些都是Lua进阶学习的重要部分。 9. 示例与实践:书中包含了大量的示例代码和实际应用场景,帮助读者理解和掌握Lua编程技巧,提升...

    lua脚本线程控制测试代码

    Lua的Coroutine通过`coroutine.create()`函数创建,然后使用`coroutine.resume()`和`coroutine.yield()`函数来启动和暂停线程。`coroutine.create()`接收一个函数作为参数,这个函数将在新的Coroutine中运行。`...

    lua教程 Programming_In_Lua

    - **第9章 协同程序**:探讨了Lua中的协同程序(coroutine)概念及其应用场景。 ##### 第二篇:tables与objects - **第11章 数据结构**:讲解了Lua中常见的数据结构,如数组、矩阵、链表、队列等。 - **第12章 ...

    LUA - coroutine

    1963], who described coroutines as “subroutines who act as the master program”, and implemented this construct to simplify the cooperation between the lexical and syntactical analysers in a COBOL ...

    高清Programming_in_lua

    8. **线程与协程**:Lua不支持多线程,但它提供了轻量级的协程(coroutine)机制,可以在单线程环境下实现并发执行。 9. **错误处理**:Lua通过try...catch结构进行错误处理,也可以使用pcall函数来捕获和处理运行...

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

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

    Programming In Lua First Edition(Revision 1.0) - PDF [不推荐下载,请下载Revision 2.0]

    - **第9章 协同程序**:讲解了Lua中的协同程序(coroutine)机制,包括基础概念、应用场景等。 - **第10章 完整的示例**:提供了基于马尔可夫链算法的具体示例。 - **第二篇 Lua表与对象** - **第11章 数据结构*...

    lua程序设计及lua中文手册

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

    Lua经典编程书籍三本

    《Programming in Lua, 2Nd Edition》是Peter Norvig所著的权威之作,该书详细解析了Lua的各个方面,包括语言设计哲学、标准库的使用以及最佳实践。这本书适合已经有一定Lua基础的读者,它会带你深入理解Lua的底层...

    lua

    对于初学者,可以通过官方文档、在线教程、书籍(如《Programming in Lua》)等资源学习Lua。社区活跃,有许多开源项目和工具可供参考。 总之,Lua是一种功能强大、简洁易学的脚本语言,它在各种领域都展现出了...

    nginx实战-基于lua语言

    2. **性能优势**:由于LuaJIT(Just-In-Time编译器)的存在,Lua代码可以被高效地执行,而且在Nginx的非阻塞事件模型下,能够处理大量并发连接,提高了系统性能。 ### 二、Lua在Nginx中的应用 1. **动态配置**:...

Global site tag (gtag.js) - Google Analytics