进程是执行着的应用程序,而线程是进程内部的一个执行序列。一个进程可以包含多个线程,线程又叫做轻量级进程。
进程与线程的区别归纳:
a.地址空间和其他资源:进程间相互独立,拥有独立内存,进程是资源分配的基本单位;线程隶属于某一进程,且同一进程的各线程间共享内存(资源),线程是cpu调度的基本单位。某进程内的线程在其他进程中不可见。
b.通信:进程间相互独立,通信困难,通信IPC方法有:管道,信号,套接字,共享内存,消息队列等,线程间可以直接读写进程数据段(如全局变量)来进行通信--需要进程同步和互斥手段的辅助,以保证数据的一致性。
c.调度与切换:线程上下文切换比进程上下文切换要快的多。进程间切换要保存上下文,加载另一个进程;而线程则共享了进程的上下文环境,切换更快。
d.在多线程os中,进程不是一个可执行的实体
(待补充)
其他论点:
进程是资源分配的单元,线程是独立运行和调度的基本单位;进程是运行中的程序,线程是进程内部的一个执行序列;进程拥有的资源多,线程拥有的资源少;多个线程共享进程的资源;进程间切换代价大,线程间切换代价小
进程和线程的主要差别在于它们是不同的操作系统资源管理的方式。进程拥有独立的地址空间,一个进程崩溃后,在保护模式下不会对其他进程产生影响;线程只是一个进程中的不同执行路径,线程有自己的堆栈和局部变量(在运行中必不可少的资源),但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉。所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程???
进程间通信(IPC,interProcess Communication):是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道),消息队列,信号量,共享存储,Socket,Streams等,其中Socket和Streams支持不同主机上的两个进程IPC。