进程和线程是操作系统里最基础、也最容易被混着背的两个概念。
面试里问它们的区别,很多回答会停在“进程是资源分配的基本单位,线程是 CPU 调度的基本单位”。这句话可以作为入口,但不够用。
继续往下追,就会遇到一串更具体的问题:为什么进程之间默认隔离?线程到底共享了什么?fork() 后父子进程有哪些东西相同、哪些东西已经分开?为什么多线程程序里随便 fork() 会出问题?Java 虚拟线程又算不算操作系统线程?
这篇文章就顺着这些问题展开。先把程序、进程、线程的边界讲清楚,再看 Linux 里的 fork、exec、wait、clone,最后回到上下文切换、线程模型和 Java 虚拟线程。读的时候可以抓住一条主线:进程更像资源和隔离边界,线程更像一条可以被调度的执行路径。
2026/6/11大约 18 分钟
