您的位置:首页 > 编程语言 > Lua

Lua 协程

2013-05-10 11:52 148 查看
原文链接(http://dotlive.blog.163.com/blog/static/2055111742012431103116787/)

lua里面协程最大好处,是把异步过程,当作同步处理

协程是这样推导出来的: 

首先,我么需要一个例程的概念,也就是函数或者过程。然后,我们会有调用和被调用这个关系。 

由于结构化思想的流行,慢慢的稳定在一个例程就一个入口一个出口,调用者和被调用者是层次嵌套的关系。虽然,这个概念非常强大了,但是,这个想法明明有些概念不好表达,最好的例子就是:

一个例程,用来生成一个无穷序列,另一个例程,处理这个序列中的每一项。如果用传统的调用返回机制,这个没有办法。这时候,我们就可以设想让这两个例程协作:生成例程没生成一个,就转移到处理例程中去,处理完了以后,再转移到生成例程。这就是协程。从中可以看出,协程是那种可以多次进入多次退出的例程,每次挂起时保留与之相关的执行上下文(execution contex),下次重入将自动恢复。

Kunth曾经说过,普通例程只是协程的特例。

协程和线城的区别:

协程其实和线程的最大区别在于:协程采用的主动让出控制权的方式,因而协程中的的指令顺序是可以预计的;相反线程由于采用的是抢占式,导致线程的执行顺序不可知,因此存在同步的问题

协程的用途:

协程的用途最明显的地方是在某些嵌入式脚本语境中。比如网络游戏的服务端,采用lua脚本来实现任务的编写功能,当脚本需要访问某个异步的功能时,典型的方式是采用回调的方法:当异步完成是,回调脚本的一个已知的函数。这儿就给脚本的编写带来了复杂度。你可能想,如果程序执行到异步点时,跳回,当异步完成后,再回到跳回点继续执行。协程就能很好的实现了这一想法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Lua 协程