Hasty Briefsbeta

双语

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的设计反映了现代硬件能力,重新思考了传统包管理器的限制。