协程coroutine资料更新

以前有一个 http://sunxiunan.com/?p=1949 这里加上一些新看到的内容,也许有重复。

http://sdiehl.github.com/coroutine-tutorial/ coroutine-tutorial

http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html

http://blog.linux.org.tw/~jserv/archives/001848.html 使用 coroutine 實做 user-level thread

http://sdiehl.github.com/gevent-tutorial/

http://mryufeng.iteye.com/blog/211004 lua coroutine是如何实现的?

http://www.douban.com/note/11552969/ Coroutine实现有感

http://electronic-blue.herokuapp.com/blog/2012/06/implement-iterators-by-coroutine/ 使用 Coroutine 實作 Iterator

http://electronic-blue.herokuapp.com/blog/2012/06/rewrite-state-machines-by-coroutine/ 使用 Coroutine 改寫狀態機

http://electronic-blue.herokuapp.com/blog/2012/06/rewrite-state-machines-by-coroutine-part-2/

http://ffown.sinaapp.com/?tag=coroutine

http://www.cnblogs.com/yujiang2011/archive/2012/02/04/2337887.html 用Lua的coroutine在实现异步逻辑的妙处

http://fuliang.iteye.com/blog/857644 Ruby1.9提供了Fiber,提供了Coroutine

http://blog.developer.mindtouch.com/tag/coroutine/

http://bookjovi.iteye.com/blog/1337512

http://www.youtube.com/watch?v=Ua-S2Hep4Io&feature=player_embedded

http://godspeedlee.myweb.hinet.net/coroutine.html

http://wla.berkeley.edu/~cs61a/fa11/lectures/streams.html

http://blog.codingnow.com/2011/12/dev_note_4.html 开发笔记 (4) : Agent 的消息循环及 RPC

http://everything.explained.at/Coroutine/

http://blog.kghost.info/index.php/2011/12/abstract-control-2-stackful-coroutine/ 高阶流程控制语句(二): stackful coroutine

http://www.blogjava.net/killme2008/archive/2010/03/23/316273.html

http://www.youtube.com/watch?v=b7R3-_ViNxk&feature=related

www.dabeaz.com/coroutines/Coroutines.pdf

http://blog.dccmx.com/2011/04/coroutine-concept/ 说说协程(coroutine)(上)——概念篇

http://blog.dccmx.com/2011/05/coroutine-implementation/ 说说协程(coroutine)下——实现篇

 

Lua编程学习及资源

1,Lua学习用什么书?

推荐《Lua程序设计》(简称PIL),译者@周惟迪 (搜Weibo),可以在淘宝上搜到卖家。比如 http://item.taobao.com/item.htm?id=13569912375

也可以在网上搜到中文版文档,另外可以看手册http://www.lua.org/manual/5.1/ 如果新学Lua,可以直接看Lua5.2的手册 http://www.lua.org/manual/5.2/

2,Lua编程相关博客和网络链接?

国内一直推Lua的高手只有云风 http://blog.codingnow.com/ 我这里也写了一些Lua相关的普及性内容 http://sunxiunan.com/?cat=21

推荐Lua学习者必看的网站,http://www.lua.org 是首选,可以下载源代码,书籍;还有邮件列表的链接 http://www.lua.org/lua-l.html 建议大家加入讨论,其中有[ANN]标记的是项目发布通告,另外技术讨论也非常深入;Lua的wiki也值得经常光顾 http://lua-users.org/wiki/ 比如这个FAQ就很有价值 http://lua-users.org/wiki/LuaFaq ,还有一个比较完整版本的FAQ在这里 http://www.luafaq.org/ ,我也有一个中文版的LuaFAQ在这里 http://sunxiunan.com/?p=1515;最后建议大家经常看的网站是github.com,搜索Lua关键字就可以找到很多开源项目。

3,Lua安装程序?

Ubuntu以及Debian下安装 http://sunxiunan.com/?p=1529 ,也可以直接用apt-get安装。

Windows下的安装可以安装http://code.google.com/p/luaforwindows/这个集成安装包,里面的第三方库有些旧,但是一般使用也足够了。

4,我博客中关于Lua编程的部分文字推荐

http://sunxiunan.com/?p=2044 Lua的优点以及与Javascript不同之处

http://sunxiunan.com/?p=1949 Lua和Python协程相关资料

http://sunxiunan.com/?p=1919 Lua非官方FAQ翻译

http://sunxiunan.com/?p=1681 Lua Unicode(wiki翻译)

http://sunxiunan.com/?p=1680 static link luasocket into lua with VC2010 under windows,静态链接Luasocket到Lua可执行程序中

http://sunxiunan.com/?p=1654 【译文】比较Lua协程与Python生成器

http://sunxiunan.com/?p=1597 谈新技术学习方法-如何学习一门新技术新编程语言

http://sunxiunan.com/?p=1503 Lua Wiki 部分翻译 — Lua源代码

http://sunxiunan.com/?p=1498 How to create c extension for lua and pass complex structure step by step

http://sunxiunan.com/?p=1447 勿用屠龙来杀猪-论如何正确整合Lua与C++

http://sunxiunan.com/?p=1358 Lua代码阅读(1),可惜烂尾了

http://sunxiunan.com/?p=1258 Lua通过COM调用外部程序excel及调用windows api

5,有趣的Lua开源项目推荐

第一名当然是LuaJit http://luajit.org/ 最新版本Luajit2.00 beta10,有人把其中的FFI抽取出来做成了单独项目,可以在github上搜到。

http://openresty.org/ 这是@agentzh 的项目,基于Nginx和lua-module做的一个整合包,如果是新的大并发系统,很大力推荐使用openresty。

https://github.com/keplerproject/ Lua web开发相关的一个项目,包含不少子项目。其中Luafilesystem和Luarocks很知名!

https://github.com/stevedonovan/Penlight Penlight是一个对Lua标准库的扩展,有点类似Jquery对于Javascript的作用。

https://github.com/fab13n/metalua metalua,给Lua加上了强大的元编程能力(metaprogramming),0.5版使用Lua实现,不需要修改Lua代码了!

https://github.com/antirez/redis redis的2.6版本包含了Lua脚本能力

https://github.com/kripken/emscripten 可以将Python,Lua通过llvm编译成javascript

https://github.com/leafo/moonscript 就相当于coffeescript和javascript的关系一样,一种新的语言,可以编译成Lua代码。

另外有个项目Lua2c可以把lua编译成c,这个比较简单,一搜便有。

https://github.com/LuaDist/Repository 最新出现的Lua安装器,下载后编译一条龙服务,类似nuget,gem,easy_install这些程序,Windows下也可以使用(mingw)。

https://github.com/luvit/luvit 仿造node.js,用Lua代码进行高并发编程

https://github.com/jmckaskill/luaffi 前面说的从luajit抽取的ffi项目

https://github.com/LuaLanes/lanes Lanes is a lightweight, native, lazy evaluating multithreading library for Lua 5.1

http://www.lua.inf.puc-rio.br/luagravity/ Lua下的async,await,这个项目应该很好玩,但是我没仔细看过。LuaGravity is a reactive language that implements the synchronous approach for concurrency. It is roughly based on Esterel and FrTime, two synchronous reactive languages, the former having an imperative style, the latter being functional.

https://github.com/chaoslawful/lua-nginx-module Nginx的Lua模块,openresty的核心部分,其中cosocket是利用协程实现的socket,好处是什么,我也不知道啊(因为服务器端编程实在很少接触)

总之,

大家可以到 https://github.com/saga/following 看我watch的项目,其中很大一部分是跟Lua相关的。

 

Lua的好和不同 part1

翻译自 http://notebook.kulchenko.com/programming/lua-good-different-bad-and-ugly-parts

我已经用Lua编程了9个月,应该是时候停下来想想这段经历了。过去几年用过不少编程语言, perl, C, Javascript, MATLAB还有其他的,从TurboPascal到F#。Lua和这些语言做个比较是件很有意思的事情。我已经用Lua完成了一些不同类型的项目:一个远程调试器MobDebug https://github.com/pkulchenko/MobDebug ,扩展一个Lua IDE https://github.com/pkulchenko/ZeroBraneStudio ,一个mobile应用https://github.com/pkulchenko/LuaRemote ,还有几个教育性质的脚本https://github.com/pkulchenko/ZeroBraneEduPack ,以及一个在浏览器canvas上使用Lua画图的demo http://notebook.kulchenko.com/programming/drawing-on-browser-canvas-with-lua 。

我已经看到有比较Lua好坏的文章,比如(http://lua-users.org/lists/lua-l/2007-11/msg00248.html http://blog.datamules.com/blog/2012/01/30/why-lua/ http://lua-users.org/lists/lua-l/2012-01/msg00731.html http://stackoverflow.com/questions/564665/advantages-of-lua http://gergely.imreh.net/blog/2011/07/language-of-the-month-lua-part-2/ http://stackoverflow.com/questions/1022560/subtle-differences-between-javascript-and-lua http://www.luafaq.org/gotchas.html ),但是我发现一些影响或者比较关注的特性没有在列表上。所以我写一个自己的列表。这篇文章不够广泛,Lua语言的某些方面也没有覆盖到(比如math和string库),但是它已经包含了我用Lua语言的要点。

Good

小:20000行源代码https://github.com/LuaDist/lua 在Linux下编译后就是182K左右的可执行解释器。

可适性:任何有ANSI C编译器的平台都可以编译。可以看到在http://www.eluaproject.net/ 以及Lego Minstorms NXT上 http://hempeldesigngroup.com/lego/pblua/ ,mobile平台https://github.com/divineprog/mobilelua 游戏主机 http://blog.brokenfunction.com/2011/11/how-to-make-a-massively-cross-platform-game/ 到浏览器中(翻译到Javascript)http://notebook.kulchenko.com/programming/drawing-on-browser-canvas-with-lua

容易嵌入和扩展:http://www.lua.org/pil/24.html 提供了简洁易用的接口与C/C++进行互通。

快:http://shootout.alioth.debian.org/ 相比其他编程语言性能非常不错,还有一个JIT编译器 http://luajit.org/performance.html 对某些任务下的性能有显著提升;如果这还不能满足某些人,可以使用C语言实现性能瓶颈部分,与C的集成很容易,还可以继续从其它有用的部分收益。

文档不错:语言手册 http://www.lua.org/manual/ ,书籍http://lua.org/pil/ 还有wiki http://lua-users.org/wiki/ 另外有http://www.capgo.com/Resources/SoftwareDev/LuaShortRef51.pdf

友好热心的社区 http://lua-users.org/ ,通过文档,wiki还有邮件列表http://www.lua.org/lua-l.html 和SO http://stackoverflow.com/questions/tagged/lua ,任何问题都可以解决。

干净和简单的参数适合初学者,对于非程序员也容易理解。Lua从Pascal的后继Modula http://en.wikipedia.org/wiki/Modula 借鉴了大部分控制语法,我仍然记得Philippe Kahn快速优雅的Turbo Pascal IDE http://en.wikipedia.org/wiki/Turbo_Pascal

集成解释器:只要命令行运行lua就行了

协程http://www.lua.org/pil/9.html 的内在支持,到实现iterators http://www.lua.org/pil/9.3.html 和非抢占性多线程 http://www.lua.org/pil/9.4.html

增量垃圾收集器http://www.lua.org/manual/5.1/manual.html#2.10 有很低的延迟,没有额外的内存开销,很少的实现复杂度,支持弱表http://www.lua.org/pil/17.html

强力的混杂式tables http://www.lua.org/pil/2.5.html 可以存储任意类型(除了nil),可以通过任何值索引(除了nil),比如 [1, 2, 5, foo = “bar”, [func] = “something”, [“some spaces”] = value()]

词法定界(Lexical scoping)

函数式编程http://www.lua.org/pil/6.html 通过一级(first class function)函数http://www.lua.org/pil/5.html 和闭包实现http://www.lua.org/pil/6.1.html

尾调用http://www.lua.org/pil/6.3.html : return functioncall()

递归函数不需要事先声明 local function foo() … foo() … end ,注意这样是不行的local foo = function() … foo() … end

函数可以返回多值。调用者可以要求任意数量的返回值,如果比实际返回数量少,剩余的被抛弃,如果要求的多于实际返回的,用nil填充。

函数允许可变函数参数个数 function foo(…) local args = {…}; bar(param, …) end

Tables可以解开成一个参数列表,通过unpack(或者Lua5.2的table.unpack)实现 print(unpack({1, 2, 3})) prints 1 2 3

可以操作环境变量(Lua5.1中的getfenv和setfenv,Lua5.2中的_ENV),这允许Lua建立沙箱机制 http://lua-users.org/wiki/SandBoxes

变量列表赋值local a, b, c = 1, 2, x, y = y, x, or a, b = foo()

使用[[…]] 做多行字符串,可以用[[…[=[…]=]…]]嵌套,注释如–[[…]]

分号作为语句分隔符是可选的

通过metatables重载 http://www.lua.org/manual/5.1/manual.html#2.8

元编程http://metalua.luaforge.net/ 可以做到获取、修改一个抽象语法树来建立新的DSL

for语句有两种方式,泛型式和数字式,数字型不光支持整数

函数调用(function call)语法糖 f’string’, f”string” f[[string]]和 f{table},以及方法调用(method call) obj:m()

简单但是很有用的调试库 http://www.lua.org/pil/23.html

 

不同之处

表和字符串索引从1开始,而不是0

在table中给一个元素赋值nil,就把这个元素删除了。

没有整型这个数据类型;number表现为浮点数

没有类,面向对象机制通过表和函数实现;继承通过元表机制实现 http://www.lua.org/manual/5.1/manual.html#2.8

方法调用通过object:method(args)实现,这和object.method(object, args)一样,but with object evaluated only once

nil和false是唯二的假值,0,0.0,”0″和其他的都是真。

~=不等符号

not, or, and关键字用做逻辑运算符

赋值是语句http://www.lua.org/pil/4.1.html,这意味着不能a=b=1或者 if (a=1) then … end

没有 a+=1 a++或者近似的方式

没有continue语句,尽管有一个解释 http://www.luafaq.org/#T1.26 和一些变体,像是repeat break until true在循环内部打断,或者Lua5.2中的goto语句

没有switch语句

括号在某些情况下有必要,for example, a = {}; a.field works, but {}.field doesn’t; the latter needs to be specified as ({}).field.

循环中控制变量默认本地化,loop外边就用不了了

数值型for中的限制和步进值是被缓存的http://www.lua.org/pil/4.3.4.html  in for i = init(), limit(), step() do ... end all three functions initlimit, andstep are called once before the loop is executed.

条件语句和其他控制结构不需要括号

字符串和数字自动转换,但是在等于和不等于比较中不能自动转换。 0 == "0" is false{} ~= 1 is true . foo[“0”]和foo[0]在表中指向不同的值; other relational operators generate errors on comparing values of different types.

逗号和分号可以用在table语法中;都可以放在最后的大括号前面作为可选操作符a = {a = 1, b = 2, }。

一些组件额外提供;一些人认为这是“没有电池”。这是紧凑和可适内核的结果,也可以通过Luarocks和Penlight解决 http://luarocks.org/ http://stevedonovan.github.com/Penlight/

协程Coroutine相关资料汇集 – Python/Lua

http://www.inf.puc-rio.br/~roberto/docs/corosblp.pdf
Coroutines in Lua
Ana L´ucia de Moura , Noemi Rodriguez , Roberto Ierusalimschy

http://www.inf.puc-rio.br/~roberto/docs/MCC15-04.pdf
Revisiting Coroutines
Ana L´ucia de Moura and Roberto Ierusalimschy

http://ravenw.com/blog/2011/08/24/coroutine-part-1-defination-and-classification-of-coroutine/
协程(一)协程的定义与分类
协程的概念最早由Melvin Conway在1963年提出并实现,用于简化COBOL编译器的词法和句法分析器间的协作,当时他对协程的描述是“行为与主程序相似的子例程”。

http://ravenw.com/blog/2011/09/01/coroutine-part-2-the-use-of-coroutines/
协程(二):协程的应用
Conway提出协程这个概念时所解决的编译器问题就属于生产者-消费者问题。
生成器实际上可以看作只有生产者的生产者-消费者模型。
目标导向编程是指模式匹配(Pattern-matching)或Prolog的查询这样的系统,由用户提出一个形式化定义的目标(Goal),系统会在一系列可选的子目标中寻找直到确认一个解决方案。在寻找过程中常常会需要回溯(Backtracking)机制,这种机制使用完全非对称协程作为生成器很容易实现。
在并发编程中,协程与线程类似,每个协程表示一个执行单元,有自己的本地数据,与其它协程共享全局数据和其它资源。目前主流语言基本上都选择了多线程作为并发设施,与线程相关的概念是抢占式多任务(Preemptive multitasking),而与协程相关的是协作式多任务。

http://ravenw.com/blog/2011/09/06/coroutine-part-3-coroutine-and-continuation/
协程(三)协程与Continuation
Continuation是一种描述程序的控制状态的抽象,它用一个数据结构来表示一个执行到指定位置的计算过程;这个数据结构可以由程序语言访问而不是隐藏在运行时环境中。Continuation在生成之后可作为控制结构使用,在调用时会从它所表示的控制点处恢复执行。

http://simple-is-better.com/news/426
Gevent 任务的持续追加和执行

http://simple-is-better.com/news/363

http://blog.jqian.net/coroutine.html

http://gashero.iteye.com/blog/442177
协程才是未来-性能夸张的协程服务器,基于eventlet(greenlet)的http性能测试

http://blog.csdn.net/lanphaday/article/details/5397038
协程三篇之一(协程初接触)

http://codeprac.iteye.com/blog/1060778
coroutine资源索引
c语言中实现coroutine有以下几种方法

http://en.wikipedia.org/wiki/Generator_%28computer_programming%29
Python相关概念

http://fuliang.iteye.com/blog/857644
Ruby Coroutine
Ruby1.9提供了Fiber,提供了Coroutine的功能。
Fibers作为实现轻量级合作并发的基础设施,和线程很像,提供了创建一个可以pause和resume的代码块,但Fibers是非抢占式的,必须由程序而不是VM来调度。每一个fiber提供了4kB的栈空间可以允许fiber的block进行深层嵌套函数调用。这是rdoc对Fiber的描述。

http://www.dabeaz.com/coroutines/index.html
A Curious Course on Coroutines and Concurrency
http://www.dabeaz.com/coroutines/Coroutines.pdf

http://www.python.org/dev/peps/pep-0342/
Coroutines via Enhanced Generators

http://lua-users.org/wiki/LuaCoroutinesVersusPythonGenerators
How do Python generators differ from Lua coroutines?
http://sunxiunan.com/?p=1654
【译文】比较Lua协程与Python生成器
Lua最重要的特性,coroutine.yield()是个一般函数,可以在coroutine.resume()动态扩展的任意位置被调用,限制是你不能yield操作C回调函数(除非你使用了Coco库)。在Python中,yield是一个语法,只能在生成器(generator)的语句体里存在。

Some Python Projects:
http://www.gevent.org/
http://codespeak.net/py/0.9.2/greenlet.html
https://github.com/slideinc/gogreen
https://github.com/j2labs/brubeck
https://github.com/sampsyo/bluelet

—————–
Lua
—————–

http://lua-users.org/wiki/CoroutinesTutorial

Lua5.1 Coroutine
http://www.lua.org/manual/5.1/manual.html#2.11

Lua5.2 Coroutine
http://www.lua.org/work/doc/manual.html#2.6
http://www.lua.org/work/doc/manual.html#6.2

http://lua-users.org/wiki/MultiTasking

http://kotisivu.dnainternet.net/askok/bin/lanes/index.html
Lua Lanes

http://keplerproject.github.com/copas/manual.html#introduction
如果想实战使用的可以试试copas

http://sunxiunan.com/?p=1689
使用Lua协程实现斐波拉切

http://mryufeng.iteye.com/blog/211650
luacoco 增强lua的coroutine功能

http://mryufeng.iteye.com/blog/211004
lua coroutine是如何实现的?
lua的coroutine是通过c的堆栈来保存调用上下文的 多少个coroutine嵌套 就有多少个luaV_execute, 而lua的state保存存在lua_State,也就是thread对象中。
顺着调用链 再看下源代码很容易就明白了。

http://sunxiunan.com/?p=1793
Re [CPyUG] Coroutine协程和闭包本质上有什么区别么
就我个人浅见,闭包概念比较容易理解使用,而协程是一个动态交互的动作,涉及到主程序和协程子程序之间的交换,理解起来要麻烦多多。

http://timyang.net/lua/lua-coroutine/
TimYang
协同程序与线程差不多,也就是一条执行序列,拥有自己独立的栈,局部变量和指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。线程与协同程序的主要区别在于,一个具有多线程的程序可以同时运行几个线程,而协同程序却需要彼此协作地运行。就是说,一个具有多个协同程序的程序在任何时刻只能运行一个协同程序,并且正在运行的协同程序只会在其显示地挂起时,它的执行才会暂停。

http://blog.codingnow.com/2011/08/lua_52_multithreaded.html
coroutine 可以实现一个协同多线程模型。即,每个线程(coroutine) 只在用户期望的地方跳出来,并可以在以后跳回去(保持当初跳离的状态)。这解决了许多抢占式多线程的麻烦。lua 的发明人在一篇访谈中谈到了 coroutine 解决并发的问题。
lua vm 本身的状态可以保留在 L 中,但 C 函数的状态却丢失了,无法正确返回。Lua 5.2 为了解决这个问题,引入了新的 api ,有兴趣可以阅读新的文档的 4.7 – Handling Yields in C
lua 的早期版本也可以通过 lua coco 实现无限制的 yield 操作。但 coco 使用了 OS 的 fiber 库 这比 5.2 版的 lua 实现多出了额外的堆栈开销。

http://blog.codingnow.com/2010/12/lua_cothread.html
基于 lua 的 coroutine ,只是写了个简单的调度器。

http://blog.codingnow.com/2010/06/masterminds_of_programming_7_lua.html
打算如何处理并发问题?
使用协程(coroutine),我们可以共享内存,但不是抢占式的。不过这个技术利用不到多核机器。但在这类机器上,使用多“进程”就能极大的发挥其性能。这个我提到的“进程”是指在 C 里的一个线程,这个线程维护自己独立的 Lua 状态机。这样,在 Lua 层面上,就没有内存共享使用。在《Lua 程序设计第二版》[Lua.org] 中,我给出了这种方式的一个原型。最近我们已经看到有些库支持了这种方式(比如 Lua Lanes 以及 luaproc)。

没有支持并发,但你为多任务实现了一个有趣的解决方案:非对称式协程。它们如何工作的?
Luiz:在我们的 HOPL 论文中,对那些设计决策全部做了极为详细的解释说明。
Roberto:我们最终选择了非对称式模型。它的基本思想非常简单。通过显式调用 coroutine.create 函数来创建一个协程,把一个函数作为协程主体来执行。当我们启动 (resume) 协程时,它开始运行函数体并且直到结束或者让出控制权 (yield) ;一个协程只有通过显式调用 yield 函数才会中断。以后,我们可以 resume 它,它将会从它停止的地方继续执行。
它的基本思想非常类似于 Python 的生成器,但有一个关键区别:Lua协程可以在嵌套调用中 yield,而在 Python 中,生成器只能从它的主函数中 yield。在实现上,这意味着每个协程像线程一样必须有独立堆栈。和“平坦”的生成器相比,“带堆栈”的协程发挥了不可思议的强大威力。例如,我们可以在它们的基础上实现一次性延续点 (one-shot continuations)。

http://blog.codingnow.com/2011/12/dev_note_4.html
这套东西的框架其实是一个 coroutine 的调度器。每个执行流(就是 case message),不论是不是并行的,都是一个 coroutine 。当遇到 listen ,fork ,break 的时候 coroutine yield 出来,由调度器来决定下一步该 resume 哪个分支就好了。
框架只需要接收外界传入的带类型信息的 message ,在调度器里维护一张消息类型到执行流的映射表,就可以正确的调度这些东西。

https://github.com/lefcha/concurrentlua

http://www.lua.inf.puc-rio.br/luagravity/
The link and await primitives are the supported reactivity mechanisms of LuaGravity. 类似C#的await

http://coco.luajit.org/
Lua的协程功能不支持C函数扩展,那么可以试试大名鼎鼎的LuaJit作者出品的Coco

关于Green Thread(绿色环保线程)、Native Thread,以及线程的一些普及问题,下面这个presentation很不错(关于Ruby)
http://www.slideshare.net/tmm1/threaded-awesome-1922719

维基百科上的这一条
http://en.wikipedia.org/wiki/Thread_%28computer_science%29

http://c2.com/cgi/wiki?SameFringeProblem
here’s the killer example of the utility of CoRoutines. The problem setup is quoted from RichardGabriel’s 1991 paper “The Design of Parallel Programming Languages” (http://www.dreamsongs.com/10ideas.html)

http://code.google.com/p/js-coroutine/
Lua style coroutine support for V8 JavaScript