1️⃣ 什么是 multiprocessing?解决什么问题?
标准答案:
multiprocessing 是 Python 用于创建多个进程并行执行任务的模块。
它主要解决 CPU 密集型任务无法真正并行的问题,因为 Python 存在 GIL(全局解释器锁),导致多线程无法利用多核 CPU。
👉 multiprocessing 通过“多进程 + 独立内存空间”,实现真正的并行计算。
2️⃣ multiprocessing 和 threading 有什么区别?
标准答案:
👉 一句话总结:
- multiprocessing = 并行(真的一起干)
3️⃣ GIL 是什么?
标准答案:
GIL(Global Interpreter Lock)是 Python 解释器中的全局锁。
它规定:👉 同一时刻只能有一个线程执行 Python 字节码。
影响:
👉 所以需要 multiprocessing 绕过 GIL。
⚙️ 二、Process 核心类
4️⃣ Process 是什么?怎么用?
标准答案:
Process 是 multiprocessing 中用于创建进程的类。
使用步骤:
p=Process(target=func, args=(1,))p.start()p.join()
5️⃣ join() 是干嘛的?
标准答案:
join() 的作用是:👉 阻塞主进程,等待子进程执行完成。
如果不调用 join:
6️⃣ daemon 进程是什么?
标准答案:
daemon 进程是守护进程:
特点:
👉 一句话:主进程是老板,daemon 是助理,老板走助理就下班。
🧩 三、Pool 进程池(重点🔥)
7️⃣ Pool 是什么?为什么要用?
标准答案:
Pool 是进程池,用来管理多个工作进程。
作用:
👉 本质:线程池的“进程版”
8️⃣ apply / apply_async / map 区别?
标准答案(面试必背)
👉 一句话记忆:
9️⃣ map 和 starmap 区别?
标准答案:
- starmap:支持多个参数(自动拆 tuple)
starmap(func, [(1,2), (3,4)])
👉 本质:是否支持“解包参数”
🔟 为什么 Pool 要 close + join?
标准答案:
👉 必须配套使用,否则:
👉 Python 推荐:
自动帮你 close + join
💬 四、进程通信 IPC
1️⃣1️⃣ 进程之间如何通信?
标准答案:
进程之间内存独立,不能直接共享变量。
通信方式:
1️⃣2️⃣ Queue 和 Pipe 区别?
标准答案:
👉 面试一句话:Queue = 工厂流水线Pipe = 两人对讲机
1️⃣3️⃣ 为什么进程不能直接共享变量?
标准答案:
因为每个进程有独立内存空间(OS级隔离)。
👉 所以变量是“复制的”,不是“共享的”。
🧠 五、共享内存 & 锁
1️⃣4️⃣ Value / Array 是什么?
标准答案:
multiprocessing.Value / Array 是共享内存机制:
👉 用于多个进程共享简单数据
1️⃣5️⃣ 为什么共享内存还要 Lock?
标准答案:
因为操作不是原子性的,比如:
实际上是:
👉 多进程会导致 race condition
1️⃣6️⃣ Lock 和 RLock 区别?
标准答案:
1️⃣7️⃣ 什么是死锁?
标准答案:
死锁是多个进程互相等待资源释放,导致全部阻塞。
原因:
👉 解决:
1️⃣8️⃣ Semaphore 是什么?
标准答案:
Semaphore(信号量)用于控制并发数量。
👉 本质:限流器
例如:
表示最多允许2个进程同时执行。
🚀 六、底层原理(加分题)
1️⃣9️⃣ Windows 和 Linux multiprocessing 区别?
标准答案:
2️⃣0️⃣ fork vs spawn?
标准答案:
2️⃣1️⃣ 为什么必须写 main?
标准答案:
因为 Windows 使用 spawn,会重新导入模块。
如果不加:👉 会无限递归创建子进程(“进程生进程”)
2️⃣2️⃣ multiprocessing 为什么适合 CPU 密集型?
标准答案:
因为:
👉 适合:计算、图像处理、数据分析