据说这个问题很重要,要从多个方面总结。
参考
0、教科书上的一句话
进程是资源分配的最小单位,线程是CPU调度的最小单位。
1、共享的变量与私有的变量
同一进程的不同线程会共享进程内存空间中的全局区和堆。
线程私有的是栈和寄存器。
因此。局部变量都是线程私有的。
全局变量、静态变量、分配于堆的变量都是共享的。
2、通信
进程间通信是IPC。包括:
- 管道(pipe)与命名管道(named pipe)
- 消息队列(message queue)
- 信号量(signal)
- 共享内存(share memory)
- 信号量(semaphore)
- 套接口(socket)
线程因为共享全局变量、堆,可以直接通过这些变量通信。
3、创建、销毁、上下文切换
多进程的创建、销毁、上下文切换都比较复杂,速度慢。
多线程的创建、销毁、上下文切换相对比较简单,速度快。
4、可靠性
多进程之间相互不影响。
多线程中的一个线程挂掉会导致整个进程挂掉。
5、分布式
多进程可以多核分布式、多机器分布式。
多线程只能多核分布式,不能多机器分布。