Behind the Scenes of Bun Install
8 months ago
- #package-management
- #systems-programming
- #performance
- Bun的安装速度显著快于npm、pnpm和yarn,在大型代码库中尤为明显。
- Bun将包安装视为系统编程问题,专注于减少系统调用并优化文件操作。
- 现代硬件进步(SSD、多核CPU)已将瓶颈从I/O转移至系统调用。
- 由于CPU模式切换,系统调用开销巨大,每次调用消耗1000-1500个时钟周期。
- Bun通过Zig直接访问系统调用,避免了Node.js的开销,从而减少系统调用。
- Bun的二进制清单缓存避免了重复JSON解析,以二进制格式存储包数据实现更快访问。
- Bun优化的tarball解压会预分配基于文件大小的内存,减少缓冲区调整和复制操作。
- Bun采用数组结构(SoA)实现缓存友好的数据布局,优化内存访问模式。
- Bun的lockfile格式针对性能优化,避免了嵌套JSON/YAML的解析开销。
- Bun运用操作系统特定的文件复制优化(如macOS的clonefile和Linux的硬链接)最小化系统调用。
- Bun的多核并行架构利用所有CPU核心,采用无锁、工作窃取的线程池设计。
- Bun通过专用线程并发处理网络操作,避免I/O阻塞。
- Bun的设计反映了现代硬件能力,重新思考了传统包管理器的限制。