关于luajit:什么是-LuaJIT为什么-Apache-APISIX-选择了-LuaJIT

本文介绍了 LuaJIT 的高灵活性和高性能,以及 APISIX 作为云原生 API 网关抉择 LuaJIT 的起因。 作者杨陶,API7.ai 技术工程师。原文链接 什么是 LuaJIT定义简略地说,LuaJIT 是 Lua 这种编程语言的实时编译(JIT,Just-In-Time Compilation)器的实现。对于不太理解 LuaJIT 的读者,咱们能够将 LuaJIT 拆成 Lua 和 JIT 两个局部来了解。 LuaLua 是一种优雅、易于学习的编程语言,具备主动内存治理、残缺的词法作用域、闭包、迭代器、协程、正确的尾部调用以及应用关联数组进行十分实用的数据处理。本文不会波及 Lua 的语法,无关内容欢送浏览 Getting Started With Lua。 Lua 的设计指标是能与 C 或其它罕用的编程语言互相集成,这样就能够利用其它语言曾经做好的方面;而它提供的个性又恰好是 C 这类语言不太善于的,比方绝对于硬件层的高层形象,动静的构造,繁难的测试等等。其袖珍的语言内核和只依赖于 ANSI C 规范的特点,使之在各平台上的可移植性变得十分高。因而 Lua 不仅是一个能够作为独立程序运行的脚本语言,也是一个能够嵌入其它利用的嵌入式语言。 但此时的 Lua 还有传统脚本语言常见的两个问题:效率低和代码裸露。而 LuaJIT 引入的 JIT 技术可能无效地解决了这两个问题。 JITJIT(Just-In-Time Compilation),实时编译,是动静编译的一种模式。在计算机科学中,动静编译并不是惟一的编译模式,比方现今依然风行的 C 语言应用的就是另一种模式:动态编译。 须要指出的是,咱们也经常将 C 语言的这种与动静编译相同的编译形式称为提前编译(AOT,Ahead-of-Time Compilation),但二者并不是齐全对等的。AOT 仅是形容在执行程序前,将某种“高级”语言编译为某种“低级”语言的行为。其编译的目标语言并不一定特定于程序宿主机上的机器码,而是任意定义的。比方将 Java 编译为 C,或者将 JavaScript 编译为 V8 等等这些行为也会被视为 AOT。因为所有动态编译在技术上都是提前执行的,所以在这种特定的上下文中应用时,咱们能够将 AOT 视为与 JIT 相同的动态编译。 ...

March 23, 2023 · 2 min · jiezi

关于luajit:yyjson-vs-luajit-buffer-vs-luacjson

luajit新推出了buffer接口,yyjson是简直就是最快json c库(不应用simd指令)比拟yyjson与luajit buffer的性能。测试json文件:应用rapidjson性能测试仓库中的测试文件:data目录下的三个文件: "./canada.json", "./twitter.json", "./citm_catalog.json" 测试机:Manjaro 21/5.10.60 linux内核,gcc-11.1.0, P50(Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz, 8G)测试论断:Luajit的buffer编码性能是yyjson 2-3倍, 解码性能与yyjson相当, 然而luajit buffer解码进去是table十分不便查问, 且buffer还有元词典扩大性能未应用。json文本,buffer二进制格局。 luajit-2.1 buffer encode 4-5ms, decode 8-11ms-- yyjson 非insitu下yyjson-0.3.0-debug decode file 28ms, decode str 17ms, encode 24msyyjson-0.3.0-release decode file 13-14ms, decode str 8-12ms, encode 7-10ms-- yyjson insitu下yyjson-0.3.0-insitu-release decode file 14ms, decode str 10ms, encode 9ms其余lua库:[json.lua](https://github.com/rxi/json.lua): encode 211ms, decode 235ms[lua-cjson](https://github.com/openresty/lua-cjson.git)(应用resty执行):encode 49ms, decode 112msyyjson代码:cmake -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release ..cmake --build . --config Release ...

September 4, 2021 · 2 min · jiezi