Lua和NodeJS
来源:互联网 发布:python wordcloud 编辑:程序博客网 时间:2024/05/01 09:32
编程模型的思考
一年前,迷恋了NodeJS一段时间,因为换工作的原因一年多没有再关注。但是NodeJS这种单线程全异步的编程模型给了我很多启发,在大多数情况下可以极大的简化程序的编写并保持相对较高的性能。其实大多数的应用场景也都是遵循20-80原则的。即百分之20的流程花费了百分之80的时间,剩余百分之80的的流程只花费百分之20的时间。而花费时间比较多的流程又分为CPU密集型和IO密集型,对于CPU密集型的流程可以引入多线程的机制充分利用CPU,对于IO密集型可以使用异步IO来解决。而对于另外百分之80的流程仅在单线程环境中编写,这样可以极大简化代码的编写,因为没有了锁冲突,所以性能很有可能比多线程环境还有提高。可见,如果一个应用能够识别出其中最花费时间的流程,采用异步事件的机制放到别的线程或进程中处理,而其余大部分逻辑仅需在d单线程环境中实现,这样即可以保证性能有可以简化编程。
NodeJS
NodeJS正是这样的思想,JS的运行环境天然就是多路复用的单线程模型,将浏览器界面的DOM事件替换为服务端的连接事件,这样就可以使用JS高效的编写后台应用。如果用来编写网络服务,因为前后台使用的语言一至(都是JS),使用起来很是方便。虽然NodeJS给我很多启发,但是它还不是我理想中的编程工具。原因有二:1、NodeJS太重量,单是编译出的解释器就有好几M大小(主要是V8太庞大)。2、NodeJS比较成熟和复杂了,难以完全理解其全部的原理。3、JS语言本身有坏名声,不喜欢。这时候就想到了另一种语言Lua。
Lua
Lua语言很小巧,静态连接的包括标准库的lua解释器仅有187K大小(X86_64 after
strip),而且据说速度非常快。Lua在设计之初就用来嵌入C语言,有完善的接口和C交互,非常适合作为胶水语言。对于我这个C程序员来说Lua非常适合用来实现类似NodeJS的编程模型。最主要的是lua语言本身十分小巧和干净。
编程框架
因为几个程序需求的驱动,想从实践入手逐渐使用lua实现一个类似NodeJS的编程框架。和NodeJS的相同的地方是都为动静态语言结合的单线程事件模型。和NodeJS的不同的地方有很多:1、lua框架一定是非常小巧和高效的,适合嵌入式环境;2、本框架不准备向使用者屏蔽其C语言的本质,lua仅仅负责处理程序中策略的部分,而C语言负责机制的实现,使用本框架一般需要同时编写C和lua代码;3、本框架不是仅适合编写服务端程序,也可以编写图形界面程序,它不会要求用户将所有功能都链接到一起,而是在编译框架的时候根据需要编译自己需要的功能,这样保证程序的小巧和高效。
目前计划第一批加入框架的功能是FTPServer,upnp和图形界面(因为自己需要用)。计划支持跨平台,初期是linux,因为是开发环境,以后有精力时移植到其他平台。框架会放在github上开源,名字还没想好。做这个框架的目的一是为了给自己做一个好用的编程框架,给将来写程序提供便利,二是学习lua和编译原理(因为lua语言解释的代码量非常小,是个很好的材料)。
一年前,迷恋了NodeJS一段时间,因为换工作的原因一年多没有再关注。但是NodeJS这种单线程全异步的编程模型给了我很多启发,在大多数情况下可以极大的简化程序的编写并保持相对较高的性能。其实大多数的应用场景也都是遵循20-80原则的。即百分之20的流程花费了百分之80的时间,剩余百分之80的的流程只花费百分之20的时间。而花费时间比较多的流程又分为CPU密集型和IO密集型,对于CPU密集型的流程可以引入多线程的机制充分利用CPU,对于IO密集型可以使用异步IO来解决。而对于另外百分之80的流程仅在单线程环境中编写,这样可以极大简化代码的编写,因为没有了锁冲突,所以性能很有可能比多线程环境还有提高。可见,如果一个应用能够识别出其中最花费时间的流程,采用异步事件的机制放到别的线程或进程中处理,而其余大部分逻辑仅需在d单线程环境中实现,这样即可以保证性能有可以简化编程。
NodeJS
NodeJS正是这样的思想,JS的运行环境天然就是多路复用的单线程模型,将浏览器界面的DOM事件替换为服务端的连接事件,这样就可以使用JS高效的编写后台应用。如果用来编写网络服务,因为前后台使用的语言一至(都是JS),使用起来很是方便。虽然NodeJS给我很多启发,但是它还不是我理想中的编程工具。原因有二:1、NodeJS太重量,单是编译出的解释器就有好几M大小(主要是V8太庞大)。2、NodeJS比较成熟和复杂了,难以完全理解其全部的原理。3、JS语言本身有坏名声,不喜欢。这时候就想到了另一种语言Lua。
Lua
Lua语言很小巧,静态连接的包括标准库的lua解释器仅有187K大小(X86_64 after
strip),而且据说速度非常快。Lua在设计之初就用来嵌入C语言,有完善的接口和C交互,非常适合作为胶水语言。对于我这个C程序员来说Lua非常适合用来实现类似NodeJS的编程模型。最主要的是lua语言本身十分小巧和干净。
编程框架
因为几个程序需求的驱动,想从实践入手逐渐使用lua实现一个类似NodeJS的编程框架。和NodeJS的相同的地方是都为动静态语言结合的单线程事件模型。和NodeJS的不同的地方有很多:1、lua框架一定是非常小巧和高效的,适合嵌入式环境;2、本框架不准备向使用者屏蔽其C语言的本质,lua仅仅负责处理程序中策略的部分,而C语言负责机制的实现,使用本框架一般需要同时编写C和lua代码;3、本框架不是仅适合编写服务端程序,也可以编写图形界面程序,它不会要求用户将所有功能都链接到一起,而是在编译框架的时候根据需要编译自己需要的功能,这样保证程序的小巧和高效。
目前计划第一批加入框架的功能是FTPServer,upnp和图形界面(因为自己需要用)。计划支持跨平台,初期是linux,因为是开发环境,以后有精力时移植到其他平台。框架会放在github上开源,名字还没想好。做这个框架的目的一是为了给自己做一个好用的编程框架,给将来写程序提供便利,二是学习lua和编译原理(因为lua语言解释的代码量非常小,是个很好的材料)。
- Lua和NodeJS
- redis lua and nodejs
- NodeJS:Windows 下Npm和NodeJS升级
- commonJS和NodeJS
- NodeJS和CommonJS
- NodeJs安装和HelloWord
- nodejs安装和配置
- nodejs和android选择
- nodejs 压缩和解压
- docker和nodejs
- nodejs 和 express安装
- NodeJS 和 ExtJS
- python 和 nodejs 比较
- Nodejs和R交互
- 安装和配置Nodejs
- nodejs和npm关系
- nodejs和mysql连接
- nodeJs安装和配置
- Tomacat启动不了报错--org.apache.catalina.deploy.WebXml addFilter
- HDU 1518 - Square
- eth0,eth1,eth2,lo是什么
- Maya如何打开大纲视图
- Objective-C(一):类的声明和对象创建
- Lua和NodeJS
- QQ拼音输入法词库和搜狗输入法词库[相互导入](使用Excel公式)
- 利用正则表达式分离汉字、英文、数字
- 压力就是处女膜,你挺过去它就破了
- cocos2d-x初学笔记12:定时器schedule
- jquery对象与js对象的相互转换
- 安装pycrypto编译错误的解决办法
- 这篇文章讲得比较清楚python的字符串编码问题
- QQ音乐梦:超越iTunes 或涉足硬件掌控生态链