Lua中有一种特殊的线程,称为coroutine,协同线程,简称协程。
其可以在运行时暂停执行,然后转去执行其他线程,然后可以返回再继续执行没完成的内容。即可以“走走停停,停停走走”。
任意时刻只会有一个协程执行,不会出现多个协程同时执行的情况。
协同线程的类型为thread,其启动、暂停、重启等,通过函数来控制,具体方法如下:
-- 创建一个协同线程实例 co = coroutine.create(function(a,b) print(a,b,a+b) -- 获取正在运行的协同线程实例 local co = coroutine.running() -- 输出协同线程实例的状态 print(coroutine.status(co)) -- 将当前协同线程挂起 coroutine.yield() print("协同线程恢复了") end) -- 启动协同线程 coroutine.resume(co,1,2) -- 输出协同线程的状态 print("主线程查看协同线程状态:"..coroutine.status(co)) -- 恢复协同线程的运行,不传后面的参数了,因为协同线程已经挂起了 coroutine.resume(co) -- 输出协同线程的状态 print("主线程查看协同线程状态:"..coroutine.status(co))运行结果如下:
协同函数
协同线程可以单独创建执行,也可以通过协同函数调用启动执行。
使用coroutine的wrap()函数创建的就是协同函数,类型为function。
协同函数的调用会启动其内置的协同线程。
-- 创建一个协同函数 co = coroutine.wrap(function(a,b) print(a,b,a+b) local co = coroutine.running() print(coroutine.status(co)) coroutine.yield() print("协同线程恢复了") print(a,b,a+b) end) -- 调用协同函数,启动协同线程 co(1,2) co()运行结果如下
文件IO
文件IO的函数分为两类:静态函数与实例 函数。
静态函数:通过io.xxx()方式对文件进行操作。