进程(Process)和线程(Thread)都是操作系统中的基本概念,它们之间有一些优劣和差异。
进程是程序执行时的一个实例,是系统进行资源分配的基本单位。所有与该进程有关的资源,都被记录在进程控制块(PCB)中。以表示该进程拥有这些资源或正在使用它们。另外,进程也是抢占处理机的调度单位,它拥有一个完整的虚拟地址空间。当进程发生调度时,不同的进程拥有不同的虚拟地址空间,而同一进程内的不同线程共享同一地址空间。
线程,有时也被称为轻量级进程,是程序执行流的最小单元,是进程中的一个实体,是被系统独立调度和分派的基本单位。与进程不同,线程与资源分配无关,线程自己不拥有系统资源,它属于某一个进程,并与进程内的其他线程一起共享进程的资源。线程只由相关堆栈(系统栈或用户栈)寄存器和线程控制表TCB组成。
通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。但是,一个线程只属于一个进程。进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。而且需要注意的是,线程不是一个可执行的实体。
进行和线程之间的差异可以从下面几个方面来阐述:
从上面的分析可以看到,似乎线程有很多优势,比如,数据共享效率高,可应对并发操作,有效利用等待时间等等,但是多线程的编程比多进程要复杂,同时,多进程的可靠性较好,因为进程间不会相互影响。实际情况还是需要自己分析拿捏的。但是一般来说,实际应用中常常采用“进程+线程”结合的方式,而不是非此即彼,因为它们两者没有绝对的好与不好,而是适合于不同场景。