⾼性能的 PHP 异步⽹络通信引擎 swoole 的作者韩天峰说过,很多程序员职业规划的⽂章,
上来就是 Linux、PHP、MySQL、Nginx、Redis、Memcache、jQuery 这些,然后就直接
上⼿搭环境、做项⽬,中级就是学习各种 PHP 框架和类库,⾼级阶段就是 MySQL 优化、
PHP 内核与扩展、架构设计这些了。这些⽂章都存在⼀个严重的缺陷,不重视基础。就好⽐
练武功,只求速成,不修炼内功和⼼法,只练各种招式,这样练出来的⾼⼿能⾼到哪⾥去?
事实上,码农圈⾥的⽜⼈⽐如韩天峰,⽐如 PHP7 作者⻦哥,他们都具备⾮常⾮常扎实的基
础,他们之所以⽜,并不是他们掌握的花拳绣腿的功夫多,⽽是内功⾮常⾮常深厚。举个⼩
例⼦,⻦哥在 PHP7 中把 HashTable 结构体从 72 字节压缩到了 56 字节,表⾯看起来不⼤的
优化,实际上是成倍的性能提升。因为 CPU 在向内存要数据的时候是以 Cache Line 为单位
进⾏的,⼀个 Cache Line 是 64 字节。56 字节可以⼀次请求搞定,⽽原来的 72 字节则需要
两次。另外就是 L1/L2/L3 的命中率也会提升很多,这个对性能的帮助更⼤。
内功它不帮助你掌握最新的开发语⾔,也不教会你时髦的框架,也不会带你⾛进⽕热的⼈⼯
智能。但是我相信它是你成为⼤⽜的必经之路。我简单列⼀下锻炼内功的好处:
1)内功⽅⾯的技术⽣命周期⻓。Linux 操作系统 1991 年就发布了,现在还是发展的如⽇中
天。对于作者 Linus,我觉得他也有年龄焦虑。但他可能焦虑的找不到接班⼈。反观应⽤层的
⼀些技术尤其是很多的框架,⽣命周期能超过⼗年我就已经觉得他很⽜叉了。如果你的精⼒
全部押宝在这些⽣命周期很短的技术上,你说能不焦虑吗!所以我觉得戒掉浮躁,踏踏实实
练好内功打好是你对抗中年焦虑的解药之⼀。
2)内功深厚的⼈理解新技术⾮常快。拿我⾃⼰来举两个⼩例⼦吧。我其实没怎么去翻过
kafka 的源码。但是当我研究完了内核是如何读取⽂件的、内核处理⽹络包的整体过程后,
就秒懂了 kafka 在⽹络这块为啥性能表现很突出了。另外⼀个是当我理解了 epoll 的内部实
现以后,回头再看 Golang 的 net 包,才切切实实看懂了地球上绝顶精妙的对⽹络 IO 的封
装。所以 Linux 内核你真的弄懂了的话,再看应⽤层的各种新技术就犹如带了透视镜⼀般,直
接看到⻣骼。
3)内核提供了优秀系统设计的实例。Linux 作为⼀个千锤百炼的系统,其中蕴含了⼤量的世
界顶级的设计和实现⽅案。平时我们在⾃⼰的业务开发中,在编码之前也需要先进⾏设计。
⽐如我在刚⼯作的时候负责的⼀个数据采集任务调度,其中的实现就是部分参考了操作系统
进程调度⽅案。再⽐如如何在管理海量的连接的情况下仍然能⾼效发现某⼀条连接上的 IO 事
件,epoll 内部的红⿊树 + 队列的组合可以提供给你⼀个很好的参考。这种例⼦还有很多很
多,总之如果能将 Linux 的某些优秀实现,搬到你的系统中会极⼤提升你的项⽬的实现⽔平。