文件系统 VS SQLite:谁更适合用作 KV Store最近我在开发一款桌面软件时需要用到 KV Store,最开始的实现用的是项目已经引入的 SQLite,但是当我的软件用于读写数据的进程变多时,经常会遇到 报错。我最开始想到的是利用文件系统来存储这些 KV 数据——用 作为文件名,Value 直接写入文件内容,这是非常直观的。 不过,「众所周知」,频繁的小文件读写的性能远不如读写单个文件的 SQLite,那么这里的性能到底差多少呢?在 PC 都普及... 评论点赞收藏22 天前
Zig 中的子类型与 C# 这种面向对象的编程语言不同,Zig 提供了多种方式让我们可以在程序中应用里氏替换: 基于我们的使用场景,我们需要像选择 Allocator 一样选择合适的替换方式。 vtable 模式是 Zig 中最接近其他 OOP 语言的实现接口的方式,Zig 中的 Allocator、Writer 等内置接口的实现都采用了 vtable 模式。这个模式由以下部分组成: 以 接口为例,其定义如下: 要... 评论点赞收藏42 天前
在 Zig 中实现 TaskCompletionSource↬ 在严肃阅读了Zig’s Io.Threaded is Neat这篇文章及其引用的文章后,我反思了一下我之前写的任务队列实现,感觉之前的实现太不 Zig 了,完全没体现出 的优势。 之前的队列 Consumer 需要用回调函数来通知任务的发布者一个任务完成了,这其实就相当于在写类似 JavaScript 中 这样的代码。而且由于 Zig 完全不支持闭包,所以这块的实现不可避免地需要用到指针: 如... 评论点赞收藏47 天前
自定义 zig test runner跟很多现代的编程语言一样,Zig 自带了测试工具,而且还提供了非常灵活的可定制性。 在 中,我们可以指定自己的 test runner 实现从而拓展 的功能: 我最开始想到要替换默认 test runner 的原因是 Zig 默认的 test runner 会在被测试代码往标准错误中写 log 时显示测试失败。而我更习惯往代码中加些日志方便我排查问题或者获得一些关于代码运行的反馈,于是我找到了 C... 评论点赞收藏47 天前
如何配置 ZigBrainsZigBrains 是 JetBrains IDE 上的 Zig 语言支持插件,集成了 ZLS,基本上可以开箱即用。但将它配置成一个接近高效的代码开发环境却费了我不少功夫。 目录跟 目录不在同一个 btrfs 子卷下,导致 命令报错:。 最简单是解决方案是用 anyzig 将 zig 库安装到 目录下。如果你的项目还依赖了 下的库,则还需要修改 zig 源码: 幸运的是不用重新编译 Zig 本体 ... 评论点赞收藏52 天前
用 Zig 实现一个简单的任务队列发了这条动态后我就开始手搓自己的 Coding Agent 了,选择的编程语言是 Zig,目标是制作一个内存占用极小的 Coding Agent CLI 工具。 在实现工具调用的时候,我希望工具可以在一定程度上被并发调用,我选择的方案是任务队列。当 LLM 生成工具调用的时候,就入队一个工具调用请求,固定数量的 Consumers 会分别从各自的调用循环中取出队列中的一个工具调用任务,并在单独的线... 评论点赞收藏59 天前
用 Cloudflare 给 WordPress 减负之前(接二连三修电脑)修 WordPress 故障的时候就发现服务器负载异常地高,我这么一个没啥流量的小站,怎么会把 1C Server 拉满呢?之前安装了 Advanced IP Blocker 插件,我观察了最近的日志后发现,有大量尝试登录的请求,让本就不富余的 CPU 雪上加霜: 只在 WordPress 上识别并 Block 这些请求并不能让这些请求停止消耗服务器 CPU 资源,并且这些恶... 评论点赞收藏93 天前