首页 > 其他分享 >lua协程

lua协程

时间:2022-11-09 15:00:19浏览次数:42  
标签:协程 coroutine create resume lua co local pool

local coroutine = coroutine
local table = table

local coroutine_create = coroutine.create
local coroutine_resume = coroutine.resume
local coroutine_yield = coroutine.yield

local tremove = table.remove

local coroutine_pool = setmetatable({}, { __mode = "kv" })

local function co_create(f)
	local co = tremove(coroutine_pool)
	if co == nil then
		print('new co')
		co = coroutine_create(function(...)
			f(...)
			while true do
				-- recycle co into pool
				f = nil
				coroutine_pool[#coroutine_pool+1] = co

				-- recv new main function f
				f = coroutine_yield()
				f(coroutine_yield())
			end
		end)
	else
		print('resume co')
		coroutine_resume(co, f)
	end
	return co
end

local co = co_create(print)
coroutine_resume(co, 'hello world')

co = co_create(print)
coroutine_resume(co, 'hello world')

 

标签:协程,coroutine,create,resume,lua,co,local,pool
From: https://www.cnblogs.com/kehuadong/p/16873687.html

相关文章

  • 协程
    阅读目录一引子二协程介绍三Greenlet模块四Gevent模块引子之前我们学习了线程、进程的概念,了解了在操作系统中进程是资源分配的最小单位,线程是CPU调度的最小单位。......
  • 协程记录一
    多任务异步协程一,Python协程基础知识1.1协程概念引入​ 协程是我要重点去讲解的一个知识点.它能够更加高效的利用CPU.​ 其实,我们能够高效的利用多线程来完成......
  • docker安装LuaJIT WEB应用防火墙
    安装包请见https://www.jianshu.com/p/b81656764613Dockerfile#FROMubuntuFROMcentosMAINTAINERG00G1SCOPYnginx-1.16.0/usr/local/src/nginx-1.16.0COPYLua......
  • 【Python零基础入门篇 · 35】:协程和IO操作的简单理解
    协程和IO操作的简单理解协程的理解协程,又称微线程,纤程。英文名Coroutine。协程是python个中另外一种实现多任务的方式,只不过比线程更小占用更小执行单元(理解为需要的资......
  • 【Python零基础入门篇 · 36】:greenlet协程模块的使用、gevent模块的使用、程序打补丁
    greenlet协程模块的使用greenlet:是一个用C实现的协程模块,通过switch()来实现任务函数间的切换。greenlet属于手动切换任务,当遇到IO操作,程序会阻塞,而不能进行自动切换。g......
  • 【Python零基础入门篇 · 36】:greenlet协程模块的使用、gevent模块的使用、程序打补丁
    greenlet协程模块的使用greenlet:是一个用C实现的协程模块,通过switch()来实现任务函数间的切换。greenlet属于手动切换任务,当遇到IO操作,程序会阻塞,而不能进行自动切换。g......
  • python 协程
    什么是协程、异步举个例子:假设有1个洗衣房,里面有10台洗衣机,有一个洗衣工在负责这10台洗衣机。那么洗衣房就相当于1个进程,洗衣工就相当1个线程。如果有10个洗衣工,就相当于1......
  • RN请求undefined is not an object (evaluating 'response.status')
    Rn模拟器调试报undefinedisnotanobject(evaluating'response.status')找到android\app\src\debug\java\com\myapp\ReactNativeFlipper.java第43行屏蔽掉......
  • Unity + XLua + VS Code断点调试 之 luaPanda (免费版本调试)
    官方文档:https://github.com/Tencent/LuaPanda/blob/master/Docs/Manual/quick-use.md官方文档已经够详细了,我这里既不多说什么了,我就说说自己在弄这个luapanda遇到的问题,......
  • openresty lua时间操作
    在Lua中,函数time、date和difftime提供了所有的日期和时间功能。在OpenResty的世界里,不推荐使用这里的标准时间函数,因为这些函数通常会引发不止一个昂贵的系统调......