平时天天跟容器打交道,但自己对其背后的机制却并不是多么了解。今天我们先跳过上层让人眼花缭乱的 containerd、CRI-O 以及各种 xxx-shim,直接进入到最深处的组件:runc。所谓“容器的三大核心技术”——namespace、cgroup、unionfs,runc 就负责着前两者。
本文主要关注 runc 里一些关键函数的流程,因此会跳过大量细节,我只能尽量保持不丢失最重要的几个部分~
继续阅读平时天天跟容器打交道,但自己对其背后的机制却并不是多么了解。今天我们先跳过上层让人眼花缭乱的 containerd、CRI-O 以及各种 xxx-shim,直接进入到最深处的组件:runc。所谓“容器的三大核心技术”——namespace、cgroup、unionfs,runc 就负责着前两者。
本文主要关注 runc 里一些关键函数的流程,因此会跳过大量细节,我只能尽量保持不丢失最重要的几个部分~
继续阅读每一个虚拟机中最重要的部分,无疑当属 opcode。2023 年的第一篇文章,就交给 opcode 解析吧~ 本文将详细解析 Lua 虚拟机里除了 table
之外的所有 opcode。
2022 再见~ 今天以一篇小文章来结束 2022 啦。这一次的文章篇幅很短,只是一点开胃小菜,简单分析下 Lua 的 opcode 指令结构与 luaV_execute
函数。
作为下一篇 opcode 的「餐前甜品」,我们先分析下 Lua 虚拟机的初始化流程,为执行 opcode 做好准备。本次的文章从创建虚拟机开始,直至 luaV_execute
执行 opcode,将覆盖除了词法、语法解析之外的大多数源码。
本周继续我们的 Lua 源码阅读,这次来到了 table
的源码。Lua 里的 table
可兼具 array
跟 hashmap
的功能,紧凑精悍。
Lua 字符串的实现非常简单,核心字段就只有:字符串内容、长度、哈希值,下面将结合源码对其做下解析。
继续阅读Lua 内部目前共存在 10 种数据类型,为了统一表示这些数据类型,Lua 内部实现了一套统一的数据结构,模拟了「基类」的效果。
继续阅读上周在工作中遇到一个诡异的问题:代码完全没动过,加了一些编译选项之后,编译正常,二进制也能运行,业务流程却失败了。经过一些排查之后,发现是 PIE 与 ld 链接资源文件的机制产生了冲突,很值得在此做一下记录,顺便复习下链接相关的知识。
继续阅读最近在研究 Nginx 源码。我把 Nginx 的 debug 日志给开了,看一看 reload
流程产生的日志都有哪些,并对源码进行简单阅读,以期对 Nginx 的 reload 流程产生一个感性认知。
ngx_list
作为 Nginx 中的链表结构被广泛使用。不同于普通的链表设计,其设计是元素组成定长数组区块,定长数组区块再进一步组成链表。这种形式虽对内存稍有浪费,但却能大幅度减少内存分配与释放的频率。