**进程是一个拥有自身内存的隔离程序;线程是一个执行单元,它与同一进程内的其他线程共享内存。**一个进程可以包含许多线程。
它是如何工作的
- 进程:拥有自己的地址空间、文件描述符和堆。由操作系统隔离 —— 一个进程中的崩溃或内存 bug 不会破坏另一个进程。上下文切换和通信(IPC)相对昂贵。
- 线程:存活于进程内部,共享其堆和全局变量,但拥有自己的栈和寄存器。创建和切换都很廉价,但共享内存意味着你需要同步。
text
进程 A 进程 B
├─ 堆(线程间共享) ├─ 堆
├─ 线程 1(自己的栈) └─ 线程 1
└─ 线程 2(自己的栈)
↑ 线程共享堆 → 必须对共享数据加锁
示例
python
threading, multiprocessing
counter =
threading.Thread(target=: work(counter)).start()
multiprocessing.Process(target=work, args=(data,)).start()
