故事库-中国往事  > 所属分类  > 
[0] 评论[0] 编辑

协程

协程与子例程一样,协程(coroutine)也是一种程序组件。相对子例程而言,协程更为一般和灵活,但在实践中使用没有子例程那样广泛。协程源自 Simula 和 Modula-2 语言,但也有其他语言支持。

目录

协程更适合于用来实现彼此熟悉的程序组件,如合作式多任务,迭代器,无限列表和管道。 协程最初在1963年被提出。

协程

协程不是进程或线程,其执行过程更类似于子例程,或者说不带返回值的函数调用。

一个程序可以包含多个协程,可以对比与一个进程包含多个线程,因而下面我们来比较协程和线程。我们知道多个线程相对独立,有自己的上下文,切换受系统控制;而协程也相对独立,有自己的上下文,但是其切换由自己控制,由当前协程切换到其他协程由当前协程来控制。

编程语言Lua从5.0版开始支持协程的概念,极大的扩展了Lua的能力。Lua的协程通过扩展库coroutine来实现,其中的所有函数如下(具体可以参考Lua的官方manual)

1
2
3
4
5
6
coroutine.create
coroutine.resume
coroutine.running
coroutine.status
coroutine.wrap
coroutine.yield

当前运行的代码可以看作运行在主协程中(就像C程序的main运行在主线程中),通过create可以创建一个协程,resume以运行此协程,直到新协程调用yield程序才能返回到”主协程“中运行。

coroutine.creat()

函数参数:接收单个参数,该参数是coroutine的主函数,即resume会执行的函数

函数返回值:返回其控制器,一个对象为thread的对象

函数作用:creat函数创建一个新的coroutine,定义了协程内的任务流程。从面对对象的角度来看,可以看成是coroutine类创建了一个对象co

coroutine.resume(co,[val1,val2,...])

函数参数:第一个参数即creat的返回值,一个thread对象。第二个参数是coroutine中执行需要的参数,是一个变长参数,可以传入任意多个。

函数返回值:当程序运行没有错误的时候,返回true,同时返回前一个调用coroutine.yield中传入的参数。如果有错误,返回错误false以及错误信息。

函数作用:当第一次调用coroutine的resume方法的时候,其从主函数第一行开始执行,之后再coroutine开始运行后,它会一直运行到自身终止或者是coroutine的下一个yield函数。

coroutine.yield(...)

函数参数:传入变长参数

函数返回值:返回在前一个resume中传入的参数值

函数作用:挂起当前的执行协程。该协程不能是一个C函数,一个元表或一个迭代器

coroutine.running():返回当前正在执行的协程

coroutine.status():返回当前协程的状态,有running/suspended/normal/dead等。

附件列表


0

故事内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。

如果您认为本故事还有待完善,请 编辑

上一篇 三农工作队伍    下一篇 全面开放新格局

同义词

暂无同义词
  • 友情链接:
  • 中原企业家
  • 华锐社区
  • 法学学习
  • 故事库
  • 舆情信息
  • 郑州商业观察
  • 美丽中国
  • 药食同源
  • Lovely China
  • 纯欲天花板
  • 留学生