Lua coroutine理解
(持续更新中.........) Lua中的coroutine和go里面的goroutine,以及erlang中的spawn出一个新的进程的思想一致(erlang应该是他们的鼻祖) coroutine中的coroutine.resume解释: 函数原型:coroutine.resume(co,para1,para2,...) 函数参数: 第一个参数co:coroutine.create的返回值,即一个thread对象; 第二个参数:coroutine中的主函数体执行需要的参数,是一个变长参数,可以传任意多个; 函数返回值: 如果程序运行没有任何错误的话,那么会返回true,true之后紧跟着的值是最近一次调用coroutine.yield时传入coroutine.yield的参数,可以有任意多个, 如果程序在运行中没有任何错误也没有遇到yield而正常结束,那么函数的返回值为true,后面跟上主函数的返回值(return后面的值) 如果有任何错误的话,就会返回false,后面紧跟上错误的信息 函数作用: 当第一次调用coroutine的resume方法时,coroutine从主函数的第一行开始执行,之后在coroutine开始运行后,它会一直运行到自身终止或者是coroutine的下一个yield函数 coroutine中的coroutine.yield解释: 函数原型:coroutine.yield(...) 函数参数:可变长参数 函数返回值: 返回最近一次调用coroutine.resume时传入的参数 函数作用: 挂起当前执行的协程,这个协程不能正在使用一个C函数、一个元表或者一个迭代器 lua的coroutine在执行coroutine.yield时的分析: 只要程序的执行流在遇到yield时,总是立马暂停,此时,coroutine的resume函数将yield的参数作为resume的返回值带出来; 当下一次执行resume的时候,执行体开始执行yield函数,其实就是对yield的函数调用进行求值,求值结果就是本次resume调用时的入参,这样yield就可以作为表达式将函数的求值结果赋给其他变量; 这也体现了resume和yield配合可以作为消息通信的通道的实质 消息传递的过程中,yield起到了关键作用,承上启下的作用。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |