lua里面协程最大好处,是把异步过程,当作同步处理
协程是这样推导出来的:
首先,我么需要一个例程的概念,也就是函数或者过程。然后,我们会有调用和被调用这个关系。
由于结构化思想的流行,慢慢的稳定在一个例程就一个入口一个出口,调用者和被调用者是层次嵌套的关系。虽然,这个概念非常强大了,但是,这个想法明明有些概念不好表达,最好的例子就是:
一个例程,用来生成一个无穷序列,另一个例程,处理这个序列中的每一项。如果用传统的调用返回机制,这个没有办法。这时候,我们就可以设想让这两个例程协作:生成例程没生成一个,就转移到处理例程中去,处理完了以后,再转移到生成例程。这就是协程。从中可以看出,协程是那种可以多次进入多次退出的例程,每次挂起时保留与之相关的执行上下文(execution contex),下次重入将自动恢复。
Kunth曾经说过,普通例程只是协程的特例。
协程和线城的区别:
协程其实和线程的最大区别在于:协程采用的主动让出控制权的方式,因而协程中的的指令顺序是可以预计的;相反线程由于采用的是抢占式,导致线程的执行顺序不可知,因此存在同步的问题
协程的用途:
协程的用途最明显的地方是在某些嵌入式脚本语境中。比如网络游戏的服务端,采用lua脚本来实现任务的编写功能,当脚本需要访问某个异步的功能时,典型的方式是采用回调的方法:当异步完成是,回调脚本的一个已知的函数。这儿就给脚本的编写带来了复杂度。你可能想,如果程序执行到异步点时,跳回,当异步完成后,再回到跳回点继续执行。协程就能很好的实现着一想法。
http://blog.youkuaiyun.com/soloist/archive/2005/03/24/329381.aspx
Lua 5.1 参考手册协程: http://www.codingnow.com/2000/download/lua_manual.html#2.11