进程和线程有什么区别?

考查重点:资源隔离与共享内存。进程隔离地址空间并拥有资源,线程共享进程内存、各有栈与执行状态;线程通信方便但需同步共享数据

本题目录

参考答案

核心回答

进程是程序运行时的资源与隔离边界,线程是进程内的一条执行流。 一个进程至少有一个线程,也可以有多个线程协作,主要从四个方面比较:

  • 资源:不同进程通常各有独立虚拟地址空间;同一进程内的线程共享代码、全局数据、堆和打开的文件等资源,但各有栈、寄存器、程序计数器和线程本地存储。
  • 调度和开销:在常见的内核线程模型中,操作系统调度可运行的线程,多条线程可以在多个核心上并行。同一进程内切换线程通常不用更换地址空间;跨进程切换还涉及地址空间等状态,创建和通信的开销通常也更高。
  • 通信与同步:进程间常用管道、Socket、共享内存等 IPC;线程可以直接访问共享对象,协作更方便,但读写共享可变数据时要处理竞争与可见性。
  • 隔离与故障:进程的隔离更强,一个进程的内存错误通常不会直接破坏另一个进程;线程共享内存,内存破坏或进程级终止可能影响所有线程。但普通任务异常是否导致整个进程退出,要看错误类型和语言运行时。

因此,需要独立生命周期、故障隔离时更适合多进程;同一应用中需要共享数据、低成本协作时更适合多线程。

“共享资源、各有现场”具体是什么意思?

假设一个服务进程里有两个工作线程处理请求。两个线程都能访问进程中的同一份商品缓存,但各自执行不同函数、处理不同请求,因此需要分别保存调用栈、当前指令位置和寄存器状态。切换回来时,才能从各自暂停的位置继续运行。

“各有栈”说的是执行状态分别维护,不代表栈之间有进程级的访问隔离。它们仍位于同一进程的地址空间中;在允许直接操作内存的语言里,经由有效地址也可能访问其他线程的栈内存,访问还受对象生命周期和同步规则约束。

共享也不等于自动安全。两个线程同时读取同一个计数器、分别加一并写回,可能覆盖彼此的更新。需要根据操作选择互斥锁、原子操作或线程安全队列,保证必要的原子性、可见性与执行顺序;只读且正确初始化的数据则通常更容易共享。

为什么进程通信更复杂,切换通常更重?

不同进程里的同名变量不是同一个对象。比如两个服务进程都维护自己的会话历史字典,进程 A 更新后,进程 B 的字典不会自动变化。可以通过管道或 Socket 传递消息,也可以把公共状态放进 Redis 等外部服务;共享内存则需要显式建立映射,并额外解决同步。

共享内存不等于取消进程边界:双方只是把一片共享区域映射进各自地址空间,其余内存仍各自独立。它减少了数据搬运,但不能自动保证多方读写正确。

上下文切换时,两种情况都要保存和恢复寄存器、栈指针等执行现场。跨进程还可能更换页表等地址空间状态,影响地址转换缓存和 CPU 缓存的局部性;这不是把整个进程内存复制一遍。同进程的线程虽省去部分工作,仍有调度、缓存和锁竞争成本,因此不能用固定倍数概括差异,也不能推导出线程越多越快。

故障隔离应该怎样理解?

线程共享进程资源,影响也可能随之扩散:一个线程关闭共享连接、破坏公共数据,或触发导致进程退出的故障,会影响其他线程。普通任务报错与进程被终止是两回事,不能把所有异常都称为“线程崩溃后整个进程必崩溃”。

多进程能更好地限制直接内存破坏的范围,也便于单独重启工作进程;代价是通信、资源管理和状态协调更复杂。它仍可能通过数据库、文件或共享内存影响其他进程,所以故障隔离还要配合资源限制与依赖治理。

常见追问

一个线程阻塞,整个进程都会停吗? 在常见的一对一内核线程模型中,阻塞通常只让当前线程等待,其他可运行线程仍能被调度。不过,如果其他线程都在等待它持有的锁,业务仍可能整体停滞;多对一的用户线程模型又有不同限制。

多线程一定能利用多核吗? 多个内核线程具备被调度到不同核心的条件,但实际并行还取决于可运行任务数量、CPU 配额、锁竞争以及语言运行时的约束。

进程、线程和协程怎样进一步区分? 协程增加了运行时如何管理可挂起任务的问题,可继续看进程、线程和协程有什么区别?。

对应教程

  • 记忆与对话历史(含 Redis 基础) §5.1~5.2:回看进程内的历史列表为什么不能天然供多实例共享,以及 Redis 如何保存公共会话状态;本文补充线程资源、调度和故障隔离的比较。

参考资料

  • 国内:JavaGuide:进程与线程详解:资源模型、线程私有现场与上下文切换部分说明进程提供什么边界,以及线程切换时要保存什么。
  • 国内:JavaGuide:进程间通信详解:地址空间隔离、消息传递与共享内存部分解释进程如何交换数据,以及共享内存为什么仍需同步。
  • 国内:小林 coding:进程、线程基础知识:依据资源共享、一对一模型与切换机制,说明正文中线程协作便利及阻塞通常只影响当前线程的条件。
  • 国外:Microsoft:About Processes and Threads:依据进程资源、线程上下文与抢占调度定义,说明正文中资源隔离和实际执行流的区别及多核条件。
  • 国外:Linux man-pages:pthreads(7):依据 POSIX 共享、私有属性和 NPTL 一对一实现,说明正文中线程共享堆与文件、各自保存执行现场及被内核调度的关系。

相关面经

35 篇

字节跳动

AI 应用客户端开发实习生
实习一面
查看原面经 →
进程与线程的区别

汽车之家

面经合集
查看原面经 →
**7. 进程和线程有什么区别?**

水滴公司

AI全栈工程师
校招秋招一面
查看原面经 →
进程和线程的区别?

小米

C++
校招一面
查看原面经 →
进程和线程的区别是什么?

水滴

AI全栈
校招一面
查看原面经 →
介绍一下进程和线程的区别。
展开剩余 30 篇面经

水滴

AI 全栈工程师
校招秋招一面
查看原面经 →
进程和线程的区别?JVM中有哪些部分是线程共享的哪些是独有的?

极智嘉

机器人仿真岗位
查看原面经 →
进程和线程有什么区别?它们在资源拥有、操作系统调度、故障隔离和使用场景方面有何不同?
哪些场景更适合多进程,哪些场景更适合多线程?

恒生电子

后端开发(Java)
秋招一面
查看原面经 →
进程与线程的区别?

宇树机器人

嵌入式AI岗
一面、二面
查看原面经 →
进程和线程的区别。推理任务放线程里,或者拆成独立进程,各有什么考虑?

信锐网科

软件开发
秋招一面、二面
查看原面经 →
多线程和多进程如何使用?

字节跳动

Agent 开发
校招秋招一面
查看原面经 →
● 说明进程和线程的区别

智书企飞

AI 测试开发工程师
一面、二面、三面
查看原面经 →
操作系统进程和线程的区别、死锁产生必要条件

快手

测试开发
一面
查看原面经 →
刚听到你有提起线程,你知道进程和线程的区别吗

腾讯云

AI 应用开发工程师
一面
查看原面经 →
Linux 中进程和线程是什么关系?

蚂蚁集团

面经合集
查看原面经 →
进程线程区别

水滴

质量保障工程师(AI)
校招秋招一面
查看原面经 →
线程和进程分别是什么。

美团

后端开发工程师(AI / Agent 方向)
秋招一面
查看原面经 →
进程和线程

百度

AI Infra 工程师
秋招一面
查看原面经 →
进程和线程的区别

去哪儿

AI 应用开发工程师
秋招
查看原面经 →
请说明操作系统中进程和线程的核心区别和联系是什么?

美团

软件开发工程师
秋招一面
查看原面经 →
进程和线程的区别是什么?

BIGO

客户端开发工程师
秋招二面
查看原面经 →
进程线程的区别,怎么调度的,怎么通信的?

微步在线

Java 开发工程师
秋招一面
查看原面经 →
我先简单问操作系统的:进程和线程的核心区别是什么?

货拉拉

AI 应用开发工程师
秋招一面
查看原面经 →
追问
进程和线程呢?有什么区别?

阶跃星辰

大模型基础设施工程师(数据管道)
实习秋招一面、二面
查看原面经 →
多进程、多线程

多益网络

AI 应用开发工程师
三面
查看原面经 →
接着是多线程和多进程,你怎么理解的

字节跳动

后端开发工程师(AI / Agent 方向)
二面
查看原面经 →
进程和线程的区别?

字节跳动

AI 应用开发工程师
日常实习一面
查看原面经 →
进程和线程之间有什么区别?

字节跳动、腾讯、蚂蚁集团

面经合集实习
查看原面经 →
进程线程

CVTE

嵌入式软件工程师(智能车载方向)
暑期实习
查看原面经 →
•线程进程的区别

阿里巴巴

Agent 开发工程师
暑期实习一面、二面
查看原面经 →
进程与线程的区别

京东

后端开发工程师(智能运维)
实习暑期一面
查看原面经 →
3 进程与线程区别

腾讯音乐

后端开发工程师
二面
查看原面经 →
你是怎么理解多线程跟多进程开发的?这两种开发模式有什么区别?
你没有实际开发过多进程对吧?那从理论上来分析呢?

腾讯

后端开发工程师(AI)
实习
查看原面经 →
进程和线程的区别

腾讯

后端开发工程师(AI)
实习
查看原面经 →
进程与线程的区别?

tuitti视界之外

Agent 平台开发工程师
实习一面
查看原面经 →
进程和线程有什么区别?

收录题集

2 个来源,共5 份题集

系统设计与后端基础

阿东玩 AI · AgentGuide · 1 条原题

查看题集 →

拼多多高频面试题

Rocky Ding · AIGC-Interview-Book · 2 条原题

查看题集 →

C和C++实战及经典考点

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →

C和C++进阶知识高频考点

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →

操作系统高频知识点

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →

相关题目

4 题