进程与线程是操作系统组织资源与调度执行的不同层次。进程通常提供地址空间及资源边界,同一进程内的线程共享部分资源,同时各有执行栈等线程状态。
隔离与共享
进程之间通常需要显式的进程间通信;线程共享堆等内存,因此交换数据方便,也需要同步来保护共享状态。以 Linux POSIX 线程为例,线程共享进程地址空间和打开的文件描述符,但拥有各自的栈与线程标识。
选择与代价
需要故障隔离或独立资源边界时可采用多进程;共享数据量大且需要并行执行时,可考虑多线程。实际代价受运行时、通信方式及工作负载影响,不能固定说进程一定慢多少。线程池限制的是可同时使用的执行资源,不会自动消除共享状态竞争。