一个 socket 在内核里只是一块结构体加一个文件描述符,它凭什么表示一条连接,listen 和 accept 各自动了什么手脚。
Linux
未读线程池不是一个「高性能设计」,它是一笔资源账。算清楚三个数字,你就知道该开几个线程、该不该开线程池。
从一条 i++ 的三条指令讲到 CPU 缓存一致性、编译器重排和内存屏障,再回头看互斥量、自旋锁、条件变量各自该在什么时候用。
clone 的那几个标志位决定了「共享什么」;NPTL 为什么赢了;以及 1:1 模型下线程数上不去的真正原因。
管道、共享内存、消息队列、socket 的对号入座;System V 的三件套还剩多少价值;以及为什么大多数「需要 IPC」的场景其实不该拆成两个进程。
mmap 到底是把文件映射进了内存,还是把内存装成了文件;共享内存为什么是最快的 IPC;以及那个让人崩溃的 SIGBUS。
管道其实只有 64KB;写满就阻塞,读走就唤醒;为什么 cat 会被 SIGPIPE 杀掉,以及 PIPE_BUF 那个 4KB 的原子性约定。
oom_score 怎么算出来的,为什么被杀的是那个进程;容器退出码 137 到底是什么;cgroup 的内存限制和主机的 OOM 差在哪。
一次 read 返回的时候,数据到底是从磁盘来的还是从内存来的;脏页什么时候回写;drop_caches 为什么不该当成常规操作。
为什么 ps 里 VIRT 有 20G 而 RSS 只有 300M;/proc/PID/maps 每行的六列分别是什么;一个虚拟地址怎么被翻译成物理页。









