luajit为什么不更新了_OpenResty到底是到底为什么快?

背景

记得在开发一个加解密功能的时候,调用了底层c的模块,通过lua xxx.lua执行耗时在秒级,一直在默默优化就是不行,通过resty执行xxx.lua文件,发现速度提升了10倍左右,为什么这么牛逼呢,就是因为在安装openresty时安装的是lua jit。

从openresty 1.5.8.1开始,默认捆绑的lua解释器就是luajit,而不是原生标准的lua。

什么是LuaJIT

LuaJIT是Lua的即时编译,简单来说就是一个高效的Lua虚拟机。

什么是JIT

官方说明:LuaJIT is a Just-In-Time Compilerfor the Lua programming language。LuaJIT的运行时环境包含一个用手写汇编实现的解释器和一个可以直接生成机器代码的JIT编译器。

注:JIT实际上就是即时编译,在Java中实际上也有JIT,用来提升性能。

为什么使用JIT

对于静态编译的缺点是不够灵活、无法支持热更,而且平台兼容性差。而对于动态解释而言,效率低和代码暴露是其主要缺陷。即时编译混合了动态解释和静态编译,在执行效率上要高于解释执行却低于静态编译。安全性上一般都会将源代码转换成字节码。而无论是源码或是字节码,本质上都是资源,因此可采用热更新机制。在兼容性上,由于虚拟机的存在,可以处理不同平台的差异,对用户保持透明。

LuaJIT流程图

b1570ade860250f0ea172c7e54a49541.png

LuaJIT工作模式

LuaJIT中存在2种工作模式

  • JIT模式
    ** JIT模式即即时编译模式,该模式下会将代码直接翻译成机器码,并向操作系统申请可执行内存空间来存储转换后的机器码。执行时直接执行机器码,所以效率是最高的。但是在iOS、XBox、PS4等平台上,鉴于自身安全原因都是不授权分配可执行内存空间的,所以这些平台下就不能使用JIT模式。
  • Interpreter模式
    ** 翻译器模式,该模式下会将代码先翻译成字节码,然后将字节码翻译成机器码,所以无需向操作系统申请可执行内存空间。所以几乎所有平台都支持此模式,但是性能相比JIT模式而言还有一定的差距
120b92aa837af2963e62793d767f9375.png
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要确认 OpenResty 是否安装了 LuaJIT,可以通过以下两种方法进行: 1. 查看 OpenResty 版本信息 打开终端,输入 `openresty -v` 命令,查看 OpenResty 的版本信息: ``` $ openresty -v nginx version: openresty/1.19.9.1 built by gcc 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04) built with OpenSSL 1.1.1g 21 Apr 2020 TLS SNI support enabled configure arguments: --prefix=/usr/local/openresty/nginx --with-http_ssl_module --with-http_v2_module --with-openssl=/usr/local/src/openssl-1.1.1g --with-pcre=/usr/local/src/pcre-8.44 --with-pcre-jit --with-cc-opt='-O2 -fdebug-prefix-map=/data/builder/debuild/nginx-1.19.9/debian/debuild-base/nginx-1.19.9=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie' ``` 如果在命令输出中看到 `built with LuaJIT` 字样,则表示 OpenResty 是使用 LuaJIT 编译的,已经安装了 LuaJIT。 2. 查看 OpenResty Lua 模块 打开终端,输入 `openresty -V` 命令,查看 OpenResty 编译时开启的 Lua 模块: ``` $ openresty -V openresty version: openresty/1.19.9.1 built by gcc 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04) built with OpenSSL 1.1.1g 21 Apr 2020 TLS SNI support enabled configure arguments: --prefix=/usr/local/openresty/nginx --with-http_ssl_module --with-http_v2_module --with-openssl=/usr/local/src/openssl-1.1.1g --with-pcre=/usr/local/src/pcre-8.44 --with-pcre-jit --with-cc-opt='-O2 -fdebug-prefix-map=/data/builder/debuild/nginx-1.19.9/debian/debuild-base/nginx-1.19.9=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie' ``` 如果在命令输出中看到 `--with-luajit` 或者 `--with-lua` 字样,则表示 OpenResty 安装了 LuaJIT。其中,`--with-luajit` 表示使用 LuaJIT 编译,`--with-lua` 表示使用官方 Lua 编译。如果两个选项都没有出现,则表示 OpenResty 没有安装 LuaJIT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值