叙事方式说明 线程和进程的关系和区别

面试中经常被问到,进程和线程的区别。在学习了进程和线程之后,我还是感觉这个问题也回答不了多少字。

我们常说:进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单元。

那么除了这一句,面试的时候还要怎么回答进程和线程的区别呢?

我觉得一二三四条的去列举进程和线程的区别,不如采取一个讲故事的叙事方式。

 

首先,进程是一个执行中的程序,执行这个程序除了需要本身的代码段之外,还需要由操作系统分配给他一些资源,使得这个进程可以完成我们想让他完成的任务。

这些资源包括:内存( 数据段,栈、堆 )和CPU( 程序计数器,寄存器)。

然而一个任务往往会再细分成多个子任务,如果我们让一个进程依次完成这些子任务,太慢了,而且对于现在计算机的多处理器体系来说,是一种浪费。

那如果我们再依次创建子进程去分别完成这些子任务,代价又是非常高的,因为每个进程都要分配内存和CPU。

因为是由一个任务分出来的子任务,所以这些子任务之间往往具有一定的关联性,需要的代码、文件、数据可能是相同的,所以我们设计比进程更小的单位----线程。

线程可以与同一进程的其他线程共享代码段,数据段和其他操作系统资源,而本身只由线程ID程序计数器寄存器组堆栈构成,这样线程就更“轻快”些。

对于CPU来说,线程又和进程一样是可以调度的,所以可以分配他们去完成进程的子任务。

叙事方式说明 线程和进程的关系和区别

这样一个进程就有了多个线程,称为多线程进程,各个线程之间共享内存,这样创建和切换线程比创建进程更节省资源和时间。而且多线程还可以提高响应程度,当一个进程的某个线程堵塞时,不会影响其他线程的运行。多线程也更好的适应了多处理器的特性,提高了并发性。

 

所以,你问我进程和线程有啥区别呢?

还真的得回答这句:进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单元。

现在我也可以用更通俗的话来说:线程主抓中央处理器执行代码的过程,其余的资源的保护和管理由整个进程去完成。