标签:
协同程序与线程thread差不多,也就是一条执行序列,拥有自己独立的栈、局部变量和命令指针,同时又与其他协同程序共享全局变量和其他大部分东西。从概念上讲线程与协同程序的主要区别在于,一个具有多个线程的程序可以同时运行几个线程,而协同程序却需要彼此协作的运行。也就是说多个协同程序在任意时刻只能运行一个协同程序,只有当正在运行的协同程序显式的要求挂起时,它的执行才会暂停。
1 --管道与过滤器filter 2 --生产者与消费者通过过滤器进行值传递 3 --这种模式通过消费者驱动生产者进行产生。 4 5 --计数器函数 6 function getCount( x ) 7 return function() 8 x=x+1 9 return x 10 end 11 end 12 --创建闭合计数器 13 local count = getCount(0) 14 --发送新值 15 function send(x) 16 coroutine.yield(x) 17 end 18 --启动一个协同程序 19 function receive( pro ) 20 local status,value = coroutine.resume( pro ) 21 return value 22 end 23 --生产者 24 function producter() 25 while true do 26 send( count() ) 27 end 28 end 29 --过滤器,接受一个生产者 30 function filter( pro ) 31 local x = 0 32 return function() 33 while true do 34 x = receive( pro ) 35 send(x) 36 end 37 end 38 end 39 --消费者,接受一个生产者协同程序及控制条件,控制条件防止死循环 40 --假设有100个消费者,驱动生产者来生产 41 function consumer( pro,num ) 42 local x = 0 43 while x < num do 44 x = receive( pro ) 45 print( x ) 46 end 47 end 48 49 local pro = coroutine.create( producter ) 50 local fil = coroutine.create( filter( pro ) ) 51 consumer( fil,100 ) 52 53 print( "消费者协同程序状态:",coroutine.status(pro) ) 54 print( "生产者协同程序状态:",coroutine.status(fil) )
标签:
原文地址:http://www.cnblogs.com/Richard-Core/p/4373582.html