lua的协程总结

协程

	coroutine.create()
	coroutine.resume()
	coroutine.yield()
	coroutine.wrap()
	coroutine.running()
	coroutine.status()

local co 接收协程的句柄

test() 协程的主函数

coroutine.create()
	创建一个协程,唯一的参数就是该协程的主函数(只是创建一个协程,并返回该协程的句柄),并不会启动协程
	co = coroutine.create(test)
coroutine.resume()
	第一个参数是所要启动的协程,之后的参数是该协程的主函数的参数
	重启执行协程,coroutine.resume(co,...)
	启动执行协程之后,会一直执行到它终止或者是挂起让出
	运行终止方式:
		1、正常主函数返回(显式返回或者运行完最后一条指令) 返回 true , ret(协程主函数返回值)
		2、非正常返回   返回 false 和 错误信息
coroutine.yield()
	使执行的协程暂停执行,让出执行权,协程让出时,对应的coroutine.resume()也会立刻返回,返回true 和 协程挂起时将返回给主程的参数
	当下次启动协程时,会从之前的让出点进行调用
coroutine.wrap()
	与 coroutine.create()类似,不同之处在于create返回的是协程本身的句柄,而wrap返回的是一个函数,调用该函数时则启动该协程,其参数就是resume()的额外参数
coroutine.running()
	返回正在跑的 coroutine,一个 coroutine 就是一个线程,当使用running的时候,就是返回一个 corouting 的线程号
coroutine.status()
	查看 coroutine 的状态
	注:coroutine 的状态有三种:dead,suspended,running,具体什么时候有这样的状态请参考下面的程序

Example

function consumer()
	for i = 1 , 10 do
		local i = receive()
		print(i)
	end
end

function receive()
	local status,value = coroutine.resume(newProductor)
	return value
end

function productor()
	local x = 0
	for i = 1 , 3 do
		x = x + 1
		send(x)   --内部实现协程挂起
	end
end

function send(x)
	print("!!!!!!@@")
	coroutine.yield(x)  --返还x给主程,并挂起协程
end


newProductor = coroutine.create(productor)   --创建协程
consumer()

result

	!!!!!!@@
	1
	!!!!!!@@
	2
	!!!!!!@@
	3
	
	nil
	cannot resume dead coroutine
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值