Node-Lua-v1.1 发布,node-lua是一款基于lua实现的脚本和服务器引擎,它支持构建海量lua服务(context_lua)并以多线程方式运行在多核服务器上,采用了任务多路复用的设计方案,有效利用了多核优势。node-lua致力于构建一个快速、简单易用的lua脚本和服务器开发和运行环境。该引擎参考了node-js和skynet的设计思想,并对其进行了整合和优化。
node-lua-v1.1本次发布主要升级lua至lua5.3.2并新增udp接口支持。具体更新如下:
1. [upgrade]升级lua5.2.3至lua5.3.2;
2. [add]新增udp支持;
3. [add]新增bson支持;
4. [add]提供freebsd系统编译和安装;
5. [add]新增通信消息(message_t)类型:int64,消息数组,bson<-->lua_Integer,多返回值,lua_table(或bson userdata);
6. [improve]优化context之间收发消息,支持发送多参和接收多返回值,同时支持发送和接收lua_table、共享buffer和bson;
5. [fix]修复lua共享proto的lstate的内存泄露问题;
7. [add]提供获取socket(tcp,udp)自端和对端地址和端口的方法;
9. [add]提供获取socket(tcp,udp)唯一描述符fd的方法,并提供通过fd直接发送数据的功能(提前打开socket共享写开关);
下载地址:
引用来自“wonder.wj”的评论
说的是物理线程,这个才能利用多核cpu提升并发处理能力引用来自“wonder.wj”的评论
luvit的模式有两种:1.work模式,执行是在luvit默认启动的work线程中运行,一个work线程对应一个lua虚拟机,代码会重新加载,会加锁的,而且线程数量是有限的,对于同一段work代码,会在不同虚拟机中执行。
2.标准thread的模式,启动一个线程,每个线程一个虚拟机,线程的数量是没有限制的,看你启动多少,每个线程都带消息循环,和主线程没有区别。
所以,要利用多核cpu,只需要启动多个线程即可,再外加自己写一个线程间通讯(最简单的是进程内生成一个全局队列,对所有虚拟机开放),就可以合理分配了。
luvit的优势是在比较成熟的libuv基础之上做封装,性能等各方面都是有保证的,对于简单的应用,单线程异步模式已经足够,而且编写逻辑简单方便。对于并发有要求的,可以执行启动多个线程来执行。
1.work模式,执行是在luvit默认启动的work线程中运行,一个work线程对应一个lua虚拟机,代码会重新加载,会加锁的,而且线程数量是有限的,对于同一段work代码,会在不同虚拟机中执行。
2.标准thread的模式,启动一个线程,每个线程一个虚拟机,线程的数量是没有限制的,看你启动多少,每个线程都带消息循环,和主线程没有区别。
所以,要利用多核cpu,只需要启动多个线程即可,再外加自己写一个线程间通讯(最简单的是进程内生成一个全局队列,对所有虚拟机开放),就可以合理分配了。
luvit的优势是在比较成熟的libuv基础之上做封装,性能等各方面都是有保证的,对于简单的应用,单线程异步模式已经足够,而且编写逻辑简单方便。对于并发有要求的,可以执行启动多个线程来执行。
引用来自“wonder.wj”的评论
luvit可以启动多线程的,每个线程一个虚拟机,只需要增加一个线程间通讯的模块能很好的利用多核cpu。而且它基础的异步模式+lua的协程,简直就是绝配,不需要想node.js那样写那么多回调,只需要在协程中按同步的写法就OK了。不知道你通讯部分怎么处理的,看sample貌似是同步的?
引用来自“socoding”的评论
在每个lua虚拟机(独立服务)里面,是同时支持同步也异步调用的,独立服务的优势是功能的隔离性,防止某个独立的功能因为共享同一个lua虚拟机带来的困扰(虽然可以在一个lua虚拟机启动多个coroutine,但这些coroutine是共享全局变量和upvalue等的)。另外,对于node-lua的独立服务,也可以自由的创建自己的coroutine,对同步和异步的调用也不会产生影响。引用来自“wonder.wj”的评论
luvit有集中模式,如果是work模式的话确实是只能使用固定数量的线程,但是它提供自行启动线程的能力,可以根据需要启动你想要的线程,然后进行线程间通讯即可。可以参看luvit中deps/thread.lua脚本,start是启动线程,work是在固定数量线程中调用脚本。二者是有区别的。
引用来自“wonder.wj”的评论
luvit可以启动多线程的,每个线程一个虚拟机,只需要增加一个线程间通讯的模块能很好的利用多核cpu。而且它基础的异步模式+lua的协程,简直就是绝配,不需要想node.js那样写那么多回调,只需要在协程中按同步的写法就OK了。不知道你通讯部分怎么处理的,看sample貌似是同步的?
引用来自“socoding”的评论
在每个lua虚拟机(独立服务)里面,是同时支持同步也异步调用的,独立服务的优势是功能的隔离性,防止某个独立的功能因为共享同一个lua虚拟机带来的困扰(虽然可以在一个lua虚拟机启动多个coroutine,但这些coroutine是共享全局变量和upvalue等的)。另外,对于node-lua的独立服务,也可以自由的创建自己的coroutine,对同步和异步的调用也不会产生影响。引用来自“wonder.wj”的评论
luvit有集中模式,如果是work模式的话确实是只能使用固定数量的线程,但是它提供自行启动线程的能力,可以根据需要启动你想要的线程,然后进行线程间通讯即可。可以参看luvit中deps/thread.lua脚本,start是启动线程,work是在固定数量线程中调用脚本。二者是有区别的。
引用来自“wonder.wj”的评论
luvit可以启动多线程的,每个线程一个虚拟机,只需要增加一个线程间通讯的模块能很好的利用多核cpu。而且它基础的异步模式+lua的协程,简直就是绝配,不需要想node.js那样写那么多回调,只需要在协程中按同步的写法就OK了。不知道你通讯部分怎么处理的,看sample貌似是同步的?
引用来自“socoding”的评论
在每个lua虚拟机(独立服务)里面,是同时支持同步也异步调用的,独立服务的优势是功能的隔离性,防止某个独立的功能因为共享同一个lua虚拟机带来的困扰(虽然可以在一个lua虚拟机启动多个coroutine,但这些coroutine是共享全局变量和upvalue等的)。另外,对于node-lua的独立服务,也可以自由的创建自己的coroutine,对同步和异步的调用也不会产生影响。可以参看luvit中deps/thread.lua脚本,start是启动线程,work是在固定数量线程中调用脚本。二者是有区别的。
引用来自“wonder.wj”的评论
luvit可以启动多线程的,每个线程一个虚拟机,只需要增加一个线程间通讯的模块能很好的利用多核cpu。而且它基础的异步模式+lua的协程,简直就是绝配,不需要想node.js那样写那么多回调,只需要在协程中按同步的写法就OK了。不知道你通讯部分怎么处理的,看sample貌似是同步的?
不知道你通讯部分怎么处理的,看sample貌似是同步的?
引用来自“qiu-fl”的评论
test引用来自“Windoze”的评论
这东西和Luvit有什么区别?