Modern Systems Programming with Scala Native
作者: Richard Whaling
语言: 英文
出版年份: 2020
下载链接:
书籍均收集自互联网,仅供学习和研究使用,请莫用于商业用途。谢谢合作。

书籍摘要

一、定位与主旨

本书是一本面向现代系统编程的实践指南,核心目标为:

在不依赖 JVM 的前提下,用 Scala Native 写出高性能、低资源占用、可部署为原生二进制的网络服务、命令行工具与嵌入式组件。
作者 Richard Whaling 以“先底层、后现代”的节奏,带领读者从 UNIX 系统调用一路走到事件驱动、非阻塞 I/O、嵌入式数据库,最终构建出可直接上线的高并发微服务。

二、内容分层与知识地图

Part I 基础系统编程(第 1–5 章)

  1. 输入/输出与内存模型

    • 对比 printf/scanfprintln/readLine,展示 C String、指针、堆/栈分配、零终止字节等底层细节。
    • 通过 Google NGram 2 GB 数据实战,证明手动内存管理+指针运算可将 JVM 版 4 分钟任务缩短到 30 秒。
  2. 结构体、数组与 qsort

    • CStruct 建模 NGram 记录,malloc/realloc 实现自增长数组;手写 CFuncPtr 比较器,单线程内完成 8 600 万条记录排序,内存占用 < 7 GB,比 JVM 快一个数量级。
  3. TCP/IP 与 HTTP 客户端

    • socket→connect→getaddrinfo 开始,自己拼 HTTP 报文,实现重定向、Keep-Alive、 chunked 传输。
    • 引入 netcat 做“白盒测试”,让读者真正看到三次握手与字节流。
  4. 进程管理与 Shell 管道

    • fork/waitpid/dup2/pipe 复现 ls | sort 经典管道;展示僵尸进程、文件描述符继承、并行执行与背压。
  5. 多进程 HTTP 服务器

    • 结合 bind/listen/accept/fork 编写阻塞式服务器;用 Gatling 压测,量化 50–99 分位延迟与错误率,为后续异步版本提供基准。

Part II 现代异步系统(第 6–10 章)

  1. 事件循环与 libuv

    • 告别阻塞:引入 libuv 的 uv_runuv_tcp_*uv_timer_*;单线程事件循环即可把 99 分位延迟从 2.7 s 降到 136 ms,错误率从 52 % 降到 14 %。
  2. Future、ExecutionContext 与 libcurl

    • 自写单线程 ExecutionContext,用 Prepare Handle 把任务队列注入事件循环;
    • 深度整合 libcurl 的 multi 接口,实现 Future[HttpResponse],单机可并发数千 HTTP 请求而绝不阻塞。
  3. 流式处理:管道与文件

    • 统一抽象 Pipe[I,O],支持 map/filter/mapConcat/mapAsync
    • 利用 libuv 线程池把“不可 poll”的磁盘 I/O 也纳入事件循环,实现背压与零拷贝流。
  4. 持久化:嵌入式 LMDB

    • 内存映射+事务:无服务器、无网络,单库支持 ACID;
    • 集成 Argonaut JSON,三行代码完成 case class ↔ JSON ↔ LMDB 序列化;
    • 最终得到一个“Web 版 Redis”示例:REST PUT/GET /key 即可存取任意 JSON,延迟 < 1 ms。
  5. 服务化与 DSL

    • 基于 node.js http-parser 重写 HTTP 解析,支持流式报文;
    • 设计 Service.get/postAsync 等 DSL,天然返回 Future
    • 演示微服务级联:服务 A 异步调用服务 B,链路全程非阻塞,且编译后二进制仅 4–6 MB,启动 < 20 ms。

三、技术特色

  • 零 JVM:生成的 hello-world 可执行文件 4.2 MB,冷启动 20 ms;同样代码在 JVM 需 100 MB、350 ms。
  • 真底层:亲手写 malloc/free,直面段错误与内存泄漏,再逐步封装成安全接口。
  • 真现代:事件循环、Future、背压、JSON 自动派生、嵌入式事务存储,全部在单线程内跑通。
  • 真实测:每个阶段都附带 Gatling 压测数据, median/99 分位、吞吐、错误率一目了然。

四、读者收获

  1. 掌握“C 级”性能调优能力,却用 Scala 的抽象威力驾驭复杂性。
  2. 拥有一套从 TCP 到 HTTP、从磁盘到网络、从同步到异步的完整工具链,可独立交付高并发、低延迟、可嵌入的云原生服务。
  3. 理解现代分布式组件(Finagle/gRPC)背后的底层机制,为未来深入研读微服务架构打下坚实基础。

五、适合人群

  • 已熟悉 Scala 语法,想“下沉”理解操作系统、网络、编译后原生性能的开发者;
  • 用 Go/Rust 写系统服务,却希望保留高级类型系统与函数式抽象的团队;
  • 需要在边缘设备、Sidecar、Serverless 场景部署<10 MB 级微服务的 DevOps 与云原生工程师。

读完本书,你将不再纠结“要 JVM 的抽象还是要 C 的性能”——
Scala Native 让你二者兼得。

期待您的支持
捐助本站