IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:虚拟机

共 5 篇相关文章

IT 累计浏览 37

Skynet 升级到 Lua 5.5.0

Skynet 随 Lua 5.5.0 正式发布完成了版本升级。Skynet 维护的定制版 Lua 核心特性是允许跨虚拟机共享函数原型,以此节省服务初始化时间和内存。实现此功能的关键难点在于正确处理短字符串内部化(interning)与外部导入原型中字符串的共存问题,该问题通过专门的补丁解决,副产品是支持了跨虚拟机共享只读常量表(可通过 skynet.sharetable 使用)。然而,鉴于 Lua 5.5 引入的 external strings 特性已大幅提升字节码加载速度,建议新项目避免依赖该补丁功能,以降低维护成本。 Lua 5.5 基本兼容 5.4,大多数 Skynet 项目无需大改,但升级后务必充分测试,并使用 `make cleanall` 强制重新编译 Lua。此次升级带来了多项有益改进:新增 `global` 关键字有助于减少拼写错误;分代垃圾回收(GC)改为步进式执行,解决了过去处理大内存服务时的停顿问题;新的不定长参数语法 `...args` 允许以表格形式访问参数,能简化部分代码实现。

IT 累计浏览 33

soluna 外挂 C 模块

soluna 默认静态链接 Lua 虚拟机,导致无法直接外挂动态链接的 C 扩展,因为动态链接会引入多份 Lua 实现,引发运行时错误。根源在于 Lua 中全局空对象的静态引用机制:多份实现会生成多个空对象,运行时比较时出现不一致。虽然 Lua 5.4 后将空对象移入运行期结构以缓解问题,但作者仍强调应避免多份实现。Windows 平台因 DLL 必须编译时绑定所有符号,问题尤为突出。 为解决此问题,soluna 采用新方案:外部 C 扩展库链接代理模块 extlua.c,该模块不依赖 Lua 内部实现,而是利用 lua_getextraspace 宏注入 Lua C APIs。外部库需定义 extlua_init 入口函数,在其中调用 luaapi_init 注入 APIs,再通过 luaL_newlib 注册模块函数。soluna 的加载器通过创建临时虚拟机、传递 APIs 引用并复制入口表来完成动态加载。这种方法同时兼容动态库

IT 累计浏览 5,580

近距离端详Android ART运行时库

这篇技术分析聚焦于Android平台从Dalvik虚拟机向ART运行时过渡的核心变革。文章从Google I/O大会的发布背景切入,指出传统Dalvik虚拟机在应对多核处理器、大内存等新硬件趋势时已显吃力,从而引出ART的诞生。 文章的核心,是将ART与Dalvik进行多维度对比。最关键的差异在于编译策略:ART采用预编译技术,在应用安装时一次性将字节码编译为本地机器码并存储,而Dalvik依赖于每次运行时的即时编译。这一改变带来了直接好处,例如性能测试显示代码执行效率可提升2到3倍,同时因减少了运行时编译开销而有助于延长设备续航。 另一个对比重点是垃圾回收机制。文章通过详实的日志对比了二者的表现:Dalvik的垃圾回收常导致数十甚至上百毫秒的停顿,引发明显的画面卡顿;而ART经过重新设计的垃圾收集器,能将这类停顿时间压缩到微秒级,卡顿现象得到极大改善。 文章也客观指出了ART的权衡之处,即首次安装或设备启动时的编译时间会变长,但这是用一次性的存储和时间成本,换取了应用运行期的长期性能收益。总体而言,这是一次为匹配现代硬件能力而进行的底层架构升级。

IT 累计浏览 7,334

Python程序的执行原理

这篇讲的是Python代码从源文件到运行背后的核心机制——字节码与虚拟机如何协同工作。文章从最简单的“Python先把代码编译成字节码”这一概述出发,层层深入,带我们看清了执行过程的每个关键环节。 作者详细拆解了字节码在Python内部的具体形态——PyCodeObject对象,并剖析了其结构体定义,如co_code、co_consts等字段如何承载代码信息。对于开发者日常可能遇到的.pyc文件,文章也理清了它的生成时机(模块import时)与Python的加载更新策略,解开了不少常见疑惑。 文章的精彩之处在于将理论落地到可操作的层面。它展示了如何利用内置的compile函数和dis模块,去实际“解剖”一段代码对应的字节码指令序列,让抽象概念变得可视、可调试。最后,文章将视角拉升到虚拟机执行层面,通过类比X86的栈帧,讲解了Python如何通过PyFrameObject管理函数调用和作用域,完整模拟了一个程序的运行世界。 整篇文章就像一份精心绘制的内部结构蓝图,不仅告诉你Python“怎么做”,更展示了它是“如何做到”的,非常适合希望突破语法层面、理解Python执行本质的开发者。

IT 累计浏览 2,060

一个链接 lua 引起的 bug , 事不过三

这篇记录了一位开发者在年前排查崩溃问题时的切身经历。一个导致 lua 虚拟机崩溃的 bug,让他耗费了近三个小时,打乱了原定的工作节奏。事后回顾,他意识到这本可以是一个“条件反射”式的问题——因为类似的错误模式他以前就遇到过。 文章的重点并非技术修复的细节,而是对自身失误的复盘。关键的转折点在于,当看到错误调用栈时,他没有第一时间去审视相关的 lua 代码。倘若当时警觉一点,就能立刻识别出这是个“老朋友”,问题根因早已心中有数,宝贵的数小时或许就不会“荒废”。 这个小故事提醒我们,在熟悉的领域里,警惕性有时反而容易松懈。面对似曾相识的异常现象,第一反应的验证方向至关重要。看似简单的修复流程背后,是经验与警惕性的双重作用。