进程 是 调度 和 资源分配 的最小单位,线程 是 执行程序 的最小单位。一个进程可以运行多个线程。
进程与线程的区别
-
共享信息:
-
进程间之间共享信息不方便,通信比较麻烦,需要一些特殊机制,如管道、有名管道、共享内存等;
-
而线程之间共享信息快速方便,将信息复制到共享的资源中即可,如堆、全局变量等
-
-
创建新进/线程:
-
调用 fork() 创建子进程的代价较高,因为 子进程需要复制父进程的虚拟地址空间,会映射真实的物理内存,从而导致创建和销毁进程都会有很大开销。同时,在进程间切换时,需要 保存和恢复 整个进程的状态,所以上下文切换的开销也很高
-
而创建线程 比创建进程通常要快十几倍,因为 线程间是共享虚拟地址空间的,不需要复制内存。而且线程间的切换 只需要保存和恢复 少量的线程上下文,所以 上下文切换 的开销较小
-
-
安全:
-
进程之间 相互隔离,所以 一个进程的崩溃 不会直接影响 其他进程,比较安全
-
而 线程共享 相同的内存空间,一个线程的错误 可能会影响 整个进程的稳定性
-