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
    
    
  • 相关阅读:
    浏览器内核
    手机端开发适配问题
    关于样式的问题
    nginx和uwsgi的区别和作用
    Flask (七) 部署
    Flask (六) 项目(淘票票)
    Flask (五) RESTful API
    Flask (四) 模型进阶
    Flask (三) 数据迁移
    Flask (二) cookie 与 session 模型
  • 原文地址:https://www.cnblogs.com/zjzyh/p/4920875.html
Copyright © 2011-2022 走看看