zoukankan      html  css  js  c++  java
  • Lua协程

    1. 协程是什么?

    简单的说可以理解为C++里面的线程(thread),但是和线程不一样的是,多线程可以并发执行,而多个协程在同一时间却只能有一个在工作。

    协程的状态有四种:

    • 挂起(suspended)--- 刚创建的协程是这个状态
    • 运行(running) --- 不解释
    • 死亡(dead) --- 程序运行结束
    • 正常(normal) --- 这个状态比较特殊,处于运行过程中使用yield暂停自己的状态

    2. 协程的创建

    coroutine.create

    3. 协程的运行

    coroutine.resume

    4. 获取状态

    coroutine.status

    5. 协程的重点:yield函数的使用

    lua协程的一项最重要的机制就是通过resume-yield来实现数据的交换
    lua 通过resume传入参数,而通过yield传出参数

    例子:

    local co = coroutine.create(function (a, b, c)
    	print(a, b, c) --- 接收到的参数
    	coroutine.yield(a + b, a + c, b + c)  --- 传出参数
    end)
    
    print(coroutine.resume(co, 4, 5, 6))
    

    6. 协程的应用

    经典案例: 生产者-消费者模式

    function receive( )
    	local status, value = coroutine.resume(producer)
    	print('receive', value)
    	return value
    end
    
    function send( value )
    	print('send', value)
    	coroutine.yield(value)
    end
    
    
    producer = coroutine.create(
    	function ( )
    		index = 0
    		while true do
    			local x = index;
    			index = index + 1
    			send(x)
    		end
    	end
    )
    
    consumer = coroutine.create(
    	function (  )
    		while true do
    			local value = receive()
    			print(value)
    		end
    	end
    )
    
    while true do
    	coroutine.resume(producer)
    	coroutine.resume(consumer)
    end
    
    
  • 相关阅读:
    imagemagick 批量旋转图片 转为横版式
    visual studio 2008 编译 filezilla
    BackgroundWorker 类
    序列化
    打工才是最愚蠢的投资
    常用汇编指令缩写(方便记忆)
    PIC中档单片机汇编指令详解(1)
    Win8之自动登录
    PIC单片机汇编指令
    好文转载—程序员的禅修之路
  • 原文地址:https://www.cnblogs.com/zjzyh/p/4920875.html
Copyright © 2011-2022 走看看