Further Performance Evolution in Python 3.14: Tail Call Interpreter
I’ve been overwhelmed by security work lately, so let me switch to something lighter to relax my mind. Python 3.14 has officially introduced a new mechanism called Tail Call Interpreter (Made by Ken Jin), which is undoubtedly another major milestone that lays the foundation for the future. Main ContentBefore discussing Python 3.14’s Tail Call Interpreter, we need to talk about the most basic syntax in C - switch-case. 12345678910switch (x) { case 1: // do something brea...
Python 3.14 的进一步性能进化: Tail Call Interpreter
最近做安全做的我头晕脑胀,来点轻松的换换脑子,让自己放松下 Python 3.14 正式引入了一个新的机制叫作 Tail Call Interpreter(Made by Ken Jin),这无疑又是一个奠定未来基础的重大工作 正文在聊 Python 3.14 的 Tail Call Interpreter 之前,我们先要来聊 C 语言中最基本的语法 switch-case 12345678910switch (x) { case 1: // do something break; case 2: // do something else break; default: // do default thing} 对于这样的代码我们最终的汇编会是什么样的呢?可能大家第一反应是先 cmp 然后 je ,不等式秒了,我们编译一个版本来看看 对于这样一段代码 12345678void small_switch(int x) { switch(x) { ...
Python 3.14: Python 世界的一大步
Python 3.14 目前主要的一些主要的特性其实已经固定了,在我看来,Python 3.14 是一个未来很多年的一个核心版本。因为其确定了是时代的 Python调试生态的基准,这篇文章将会来聊聊这个 Python 世界中的史诗级改进 正文在我们日常调试 Python 代码的时候,我们经常会遇到这样一个问题,我们需要采样当前的 Python Runtime 的状态,进而进一步调试我们的 Python 进程 常见的手段莫过于两种 通过 eBPF + UProbe 等手段来触发 通过 process_vm_readv 等 Syscall 来直接整块读取内存 无论这两种方式都有一个核心的问题,我们怎么样来解析内存中的数据? 用 https://github.com/jschwinger233/perf-examples/blob/main/cpython310_backtrace/bpf.c 来做一个例子,在之前的很多年的时候,我们会怎么做 123456789101112131415161718192021222324252627282930313233343536373839...
简单聊聊常见的负载均衡算法
这篇文章鸽了很久,最终决定还是老老实实写完,来介绍一下常见的一些负载均衡算法实现。本文的代码最终都会放在 load-balancer-algorithm1 这个 repo 中 我从来没有觉得写博客快乐过 正文先行准备既然是讲 LoadBalancer 中常用的一些负载均衡算法,我们先来对一些前置准备做一些讨论 我们目前需要两个基础的数据结构 代表着 Backend 节点的结构 代表着请求上下文的结构 那么我们可以得出下面一些基础代码 1234567891011121314151617181920import dataclasses@dataclasses.dataclassclass Node: host: str = "" port: int = 0 node_available: bool = True @property def available(self) -> bool: return self.node_availableimport dataclasses@dataclasses.data...
简单吐槽一下摇曳露营的台配
看了一下台配摇曳露营的 PV 放松,有些地方很想吐槽,写个短文聊一下 正文先放出两版本对比 下面是原版 (function(){var player = new DPlayer({"container":document.getElementById("dplayer0"),"theme":"#FADFA3","loop":true,"lang":"zh-cn//语言","screenshot":true,"hotkey":true,"preload":"auto","volume":0.9,"video":{"url":"/videos/yuanban_yuru_S1E1.mp4"}});window.dplayers||(window.dplayers=[]);window.dplayers.push(player);})() 下面是台配 (function(){var player = new DPlayer({"container":document.getElementById("dplayer1"),"theme":"#FADFA3","loop":true,"la...
Saka 馬鹿
这篇博客是我在刷题群内的 2025 年的第一次分享整理的演讲稿。主要是完整复盘了过去几年里我犯下的两个比较典型的低级错误。 希望大家能看的开心 正文首先来看一下我们抽象后的架构 很平平常规的一个架构。而我犯的两次相对低级的错误分别是在数据的入口和数据落点上。OK 那么我们分别来看一下我犯下的错误 首先要分享的是我搞出的一个核心数据库删除的事故。在介绍事故现场之前,我将先介绍下下当时我们整体资源管理的结构 我们基于 Terraform 管理资源 熟悉 Terraform 的同学都知道,Terraform 很重要的一点就是需要一个介质来存储当前 infra 的 state,这样能让后续的操作基于状态来实现 diff 我们当时的 state 是存储在 local fs ,state 文件跟随着 Git Repo 一起变更 我们基于目录划分不同业务需要的 AWS Infra 所对应的 Terraform 描述 关键设施没有开启删除保护 OK,我们继续往前讲,我们来激活一下事故现场的回忆 事故当天,需要给一个新的业务需要一个 AWS Aurora 实例 我直接复制了一个目录,然...
本当の僕らをありがとう
每年都会选择一句话来总结自己这一年,前年是“但行好事,莫问前程”,去年是 “Per aspera, Ad astra”。那么今年我选择是 “本当の僕らをありがとう”。 这句出自 《Angel Beats!》的片尾曲《My Song》。含义为“向最真实的我们致谢” 开篇今年其实某种意义上是去年的延续,去年年中的我尝试从18楼一跃而下。而双相以及自己的不自信以及在职业上的焦虑让躯体化的症状持续到了今年。某种意义上来说今年是混沌的一年。 不过今年也是挺值得思考的一年,可能今年所积累的东西可能会在未来以某种特殊的形式回馈回来。 生活双相的治疗进入了深水区,今年状态一直起伏不定,药物性肝损伤,双相波动带来的躯体化症状如影随行。今年虽然没有如同去年一样试图从18楼上来一次刺客信条。但是对我来说,艰险程度还超过去年。 一如既往的噩梦,各种生活里的反复一如既往的围绕着我。在调整治疗方案后,虽然情绪有所改善,但是所带来的副作用又成为新的问题。 不过日子还得过,生活也还得继续。爱和希望也还围绕着我。 你们可能还记得去年家里新增了一只名为小熊的猫。出身流浪,最让人担心。今年病危三次,挺过来三次,指标...
OpenDAL 0.51 版本代号 “本当の僕らをありがとう。” 背后的故事
Apache OpenDAL v0.51.0 第一个 RC 版本发布了,这个大版本有些特殊,是我第三个负责 Release 的版本,也是第一个带有 Subtitle 的版本 这个版本的副标题为 “本当の僕らをありがとう” ,意为 “向真实的我们致谢” 聊聊这个版本背后的一些故事吧 正文在筹备 v0.51.0 的发版的时候,我本来是想想一个标题,来庆祝摇曳露营 S4 制作确定的。所以在 @xuanwo 和 @frostming 的支持和建议下。我发起了一个提案 [VOTE] Proposal: Adding Cultural References to Release Titles1 提案 #5303 通过后,我本来想用志摩凛的一句我很喜欢的台词“ソロキャンは寂しさも 楽しむものなんだって”来作为摇曳露营 S4 制作决定的庆祝。但是不知道怎么回事,我耳边突然想起了 《My Song》 这首歌 苛立ちをどこにぶつけるか,【焦躁地在哪里寻找的时候】,探してる间に终わる日,【一天已经结束了】,空は灰色をして,【天空一片灰暗】,その先は何も见えない,【前方什么都看不见】,常识ぶってる奴...
好了,现在你的知识也是我的了.jpg
最近给朋友介绍了一下我对于一些外部资料的吸收的经验。我想了想整理了下聊天记录,将我整个思路以博客的形式展现出来。希望能帮到看这篇博客的人。 正文首先说明,我自己看过关于知识体系方法论的资料很少。本文描述的是我自己在这些年经过不断改良后觉得目前最适合我的一套方法,可能不适合所有人,仅供参考 我自己的宗旨是 “有些时候我不一定需要成为知识的生产者,而是成为知识的搬运者” 或者套用鸭子类型的一个描述就是“如果一个项目,你知道原理,理解细节,能完整的给别人分享其中的细节,那么这就是你做过的项目” 成为一个合格的知识搬运者,那么意味着你需要擅长或者说能较好的吸收一些外部资料。我自己将原则归纳为两点 摆正心态 知识迁移 这里我先要着重强调心态上的重要性,再开始去描述我们怎么样去做知识的迁移 我自己对于心态是这样的观点:很多人对于去内化别人的资料有一种潜在的耻辱性心态,大家在面对一些资料的时候,会下意识的有“这不是我做的”,“我好菜啊”,“好难懂”心态,而不是抱着“原来我可以这么做”,“原来我之前这么做是对的”,这个心态将决定了你知识吸收的效率。 在我们聊完心态的重要性后,我将以之前看到...
如何使用 WASMTIME 来运行 CPython for WASI,然后利用 Python 实现的 HostFunction 来扩展它?
国庆节搞了一个活,利用 wasmtime 来执行编译成 WASM/WASI 字节码的 CPython 虚拟机,并在宿主机一侧利用 Python 实现的 Host Function 来扩展它。 再次声明一下,这个只是我个人想搞的活,没有再任何生产环境中得到验证,just for fun(XDDD 正文首先我们简单介绍一下 WASM/WASI,这里我直接引用一下 AI 生成的 brief summary WebAssembly (WASM) 是一种低级编程语言,可在现代网页浏览器中运行。它提供接近原生的性能。WebAssembly System Interface (WASI) 是 WASM 的一个标准扩展,允许 WASM 程序在浏览器外运行,访问系统资源。这两项技术旨在提高 Web 应用性能,并使 WASM 在更多环境中可用。 而 WASM/WASI 技术路线核心的优势在于 跨平台的兼容性 多语言通过静态编译的支持 Native Sandbox 带来的安全性 所以 WASM/WASI 不仅在浏览器得到了广泛的应用, 现在其应用也逐渐扩展到了服务端。Serverless C...