进程与线程:公司员工大揭秘

张开发
2026/5/26 1:05:26 15 分钟阅读
进程与线程:公司员工大揭秘
只要你学过编程或者准备去面试有四个字绝对像幽灵一样缠着你“进程与线程”。随便翻开一本操作系统的教科书上面一定会赫然写着两句八股文“进程是操作系统资源分配的基本单位。”“线程是操作系统调度和执行的基本单位。”每个字都认识连在一起却根本不知道在说什么背下来了过两天又全忘了。今天咱们就把这些文绉绉的学术名词全部扔掉用生活中最通俗的比喻把这俩兄弟的底裤扒得干干净净。最核心的比喻公司与员工理解进程和线程你只需要在脑海里构建这样一个场景假设你的电脑是一座巨大的写字楼电脑里的CPU 就是干活的劳动力。进程Process 一家公司线程Thread 公司里的打工人员工顺着这个比喻我们来看看它们的本质区别。1. 它们到底是干嘛的定义区别进程公司是“分配资源”的单位。你要开一家公司写字楼物业是不是得给你划一块办公区给你配上水电网这就是操作系统给“进程”分配的内存空间和系统资源。一家公司本身是不能干活的它只是一个框框。线程员工是“干活”的单位。公司成立了谁来敲键盘打代码得招员工。员工才是真正执行任务的人。重点来了一家公司至少得有一个老板或者核心员工吧所以一个进程至少包含一个线程这叫主线程。如果公司业务做大了老板一个人干不过来就可以多招几个员工一起干这就叫多线程。2. 它们的数据能共享吗内存与通信进程之间公司与公司老死不相往来。腾讯和阿里都在这栋写字楼里但它们在不同的楼层门禁卡也不通用。腾讯的员工不可能随便跑去阿里的办公室翻人家的抽屉。这在计算机里叫进程隔离。每个进程都有自己独立的内存空间。如果腾讯非要跟阿里谈合作得通过发邮件、打电话非常麻烦这就叫IPC进程间通信。线程之间员工与员工资源共享毫无保留。同一个公司里的员工大家都在一个大开间里办公。茶水间的咖啡机共享内存、会议室全局变量、公司的文件柜大家都可以随便用。但这也会带来一个麻烦如果两个员工同时去抢同一个微波炉热饭就会打起来。所以多线程编程最头疼的就是并发安全问题需要加锁大家排队用微波炉。3. 谁的代价更大创建与切换开销创建进程开新公司非常昂贵极度折腾。你要新开一家公司得去工商局注册、租场地、搞装修、买电脑……操作系统创建一个新进程也是一样要分配大量独立的内存和资源速度很慢开销极大。创建线程招新员工非常廉价加把椅子就行。公司场地已经是现成的了新招一个员工只需要给他加一把椅子发个工牌就能马上开始干活。所以在代码里开启一个新线程系统开销是非常小的。同样CPU 在切换员工线程上下文切换时也比切换公司进程切换快得多。4. 如果出错了后果有多严重健壮性与崩溃影响多进程公司矩阵极其稳定。如果阿里突然破产倒闭了进程崩溃对腾讯有影响吗毫无影响腾讯员工照样按时下班。所以多进程架构非常健壮一个子进程挂了不会牵连其他进程和主进程。多线程同舟共济一颗老鼠屎坏了一锅粥。因为同一个公司的员工都在同一间办公室里。如果某个员工不小心把办公室给点了比如发生了内存溢出、野指针报错整家公司都会跟着灰飞烟灭也就是说一个线程的致命错误会直接导致它所在的整个进程崩溃所有其他线程全部陪葬。现实软件中的实战例子光说理论不行咱们来看看每天用的软件是怎么选择的。典型代表 1谷歌 Chrome 浏览器多进程架构你打开 Chrome 浏览器每新建一个标签页其实都是在后台开了一个全新的进程开了一家新公司。为什么谷歌要这么搞因为网页太容易卡死了如果用多线程你在标签页 A 进了一个带病毒的垃圾网站导致网页崩溃那你正在看视频的标签页 B、正在写文档的标签页 C 会瞬间全部一起崩溃。为了保护你的体验谷歌宁愿多耗费你电脑的内存开新公司的成本也要保证“一个网页挂了其他网页丝毫不受影响”。典型代表 2微软 Word 文档多线程架构当你打开一个 Word 文档这是一个进程你在疯狂敲键盘打字时其实里面有好多线程在同时工作一个线程负责接收你键盘的输入一个线程在后台偷偷帮你做拼写检查给你画红色的波浪线还有一个线程在默默地每隔 5 分钟帮你自动保存一次文件。它们必须共享这篇文档的数据如果拼写检查的线程崩溃了整个 Word 软件就会弹出“程序无响应”直接闪退。总结本质区别进程是操作系统分配资源的最小单位线程是 CPU 调度执行的最小单位。包含关系一个进程至少包含一个线程线程是依附在进程内部生存的。内存共享进程之间相互独立内存不共享同一个进程内的线程共享该进程的所有内存资源。开销与影响进程创建和切换的开销大但很稳定一个挂了不影响其他线程创建和切换的开销小但很脆弱一个线程崩溃会导致整个进程崩溃。把这个底层逻辑搞清楚以后不管是学并发编程、分布式还是排查线上 Bug你都能一眼看透本质

更多文章