lua多线程lanes的测试
文章目录背景编译准备1. 下载源码2. 安装MinGW,Cmake3. 安装lua for windows代码测试背景因为原始的lua代码不支持多线程,多数用的都是协程。这样对于多任务的,需要定时刷新状态的应用就不太理想。为什么不支持尼?因为lua状态机的维护是一个全局变量,这样多线程会导致维护成本高。lanes?lanes是一个支持lua多线程的开源库,通过维护不同的lua状态机实现多线程。线程
·
背景
因为原始的lua代码不支持多线程,多数用的都是协程。这样对于多任务的,需要定时刷新状态的应用就不太理想。
为什么不支持尼?
因为lua状态机的维护是一个全局变量,这样多线程会导致维护成本高。
lanes?
lanes是一个支持lua多线程的开源库,通过维护不同的lua状态机实现多线程。线程间通信使用linda对象。
编译准备
1. 下载源码
2. 安装MinGW,Cmake
- 这里安装不是大问题,安装好后记得将bin目录添加到环境变量中去。
- MinGW中需要添加msys的安装。
3. 安装lua for windows
有几点需要注意:
- 安装lua的版本需要是5.1版本
- 查看Makefile文件我们看到有去查找lua51和lua5.1的路径,所以安装好后需要将lua的路径添加到环境变量中去。
代码测试
lanes的接口实现实际上是脚本调用动态lanes库后进一步封装实现的。都放在lanes.lua脚本中。
编译好后,在src目录下建立一个lanes_task.lua的文件,将下面代码copy到文件中去,cmd运行 lua lanes_task.lua,这里我尝试过将编译好的动态库一出来,但是运行的时候老是加载失败,暂时没有找到原因。
local lanes = require "lanes"
lanes.configure{with_timers=false} --with_timers置为false之后才能运行sleep
local linda = lanes.linda() --可以看成是一个消息队列
local function loop( max)
for i = 1, max do
print( "sending: " .. i)
linda:send( "y", i) -- linda as upvalue 发送消息
lanes.sleep(1)
end
end
a = lanes.gen( "*", loop)( 10) --建立task
while true do
local key, val = linda:receive( 4.0, "y") -- timeout in seconds 接收消息
if val == nil then
print( "timed out",lanes.now_secs())
break
end
print( tostring( linda) .. " received: " .. val)
end
更多推荐
已为社区贡献2条内容
所有评论(0)