一、二者的区别
基本概念不同
进程是资源调度的基本单位
线程是系统调度的基本单位
包含范围不同
线程是进程的一个实体
开销不同
进程的创建撤销开销大
线程的创建撤销开销小
所以多线程的开销小,也方便并行。
并发性不同
多线程占用的内存少,成本也小。并行起来很方便,逻辑控制也简单。确保同步的加锁也很便捷。更适应多核 CPU,多个线程可以同时运行,上下文开销也会变小。
但多线程没有内存隔离,一个线程崩溃会导致整个程序崩溃。
多进程内存隔离,单个进程崩溃不会影响其他进程,调试方便。
但多进程成本较大,逻辑控制成本复杂,要和主程序交互。
二、进程通信
1. 管道
一个数据的缓冲区,进程在管道内存取数据。
2. 信号量
semaphore。本质是个共享锁,进程通过对这个信号量的操作来就行线程的分派
3. 消息队列
信号量只能告知事件的发生,消息队列可以通知事件内容
4. 共享内存
使用内存映射文件,这个要注意权限问题,不限制容易发生误操作。多进程可以同时访问
5. 套接口
socket