作者: | Richard Whaling |
语言: | 英文 |
出版年份: | 2020 |
下载链接: |
书籍均收集自互联网,仅供学习和研究使用,请莫用于商业用途。谢谢合作。 |
本书是一本面向现代系统编程的实践指南,核心目标为:
在不依赖 JVM 的前提下,用 Scala Native 写出高性能、低资源占用、可部署为原生二进制的网络服务、命令行工具与嵌入式组件。
作者 Richard Whaling 以“先底层、后现代”的节奏,带领读者从 UNIX 系统调用一路走到事件驱动、非阻塞 I/O、嵌入式数据库,最终构建出可直接上线的高并发微服务。
输入/输出与内存模型
printf/scanf
与 println/readLine
,展示 C String、指针、堆/栈分配、零终止字节等底层细节。结构体、数组与 qsort
CStruct
建模 NGram 记录,malloc/realloc
实现自增长数组;手写 CFuncPtr
比较器,单线程内完成 8 600 万条记录排序,内存占用 < 7 GB,比 JVM 快一个数量级。TCP/IP 与 HTTP 客户端
socket→connect→getaddrinfo
开始,自己拼 HTTP 报文,实现重定向、Keep-Alive、 chunked 传输。进程管理与 Shell 管道
fork/waitpid/dup2/pipe
复现 ls | sort
经典管道;展示僵尸进程、文件描述符继承、并行执行与背压。多进程 HTTP 服务器
bind/listen/accept/fork
编写阻塞式服务器;用 Gatling 压测,量化 50–99 分位延迟与错误率,为后续异步版本提供基准。事件循环与 libuv
uv_run
、uv_tcp_*
、uv_timer_*
;单线程事件循环即可把 99 分位延迟从 2.7 s 降到 136 ms,错误率从 52 % 降到 14 %。Future、ExecutionContext 与 libcurl
ExecutionContext
,用 Prepare Handle
把任务队列注入事件循环;Future[HttpResponse]
,单机可并发数千 HTTP 请求而绝不阻塞。流式处理:管道与文件
Pipe[I,O]
,支持 map/filter/mapConcat/mapAsync
;持久化:嵌入式 LMDB
case class ↔ JSON ↔ LMDB
序列化;PUT/GET /key
即可存取任意 JSON,延迟 < 1 ms。服务化与 DSL
Service.get/postAsync
等 DSL,天然返回 Future
;hello-world
可执行文件 4.2 MB,冷启动 20 ms;同样代码在 JVM 需 100 MB、350 ms。malloc/free
,直面段错误与内存泄漏,再逐步封装成安全接口。读完本书,你将不再纠结“要 JVM 的抽象还是要 C 的性能”——
Scala Native 让你二者兼得。