线程(thread) vs.进程(process) 操作系统,多线程基本概念

 线程(thread) 与进程(process)是操作系统中两个非常重要的概念,也经常出现在技术类岗位面试中,并且根据面试者的回答侧重点如内存结构,线程通信等等进行展开。

关于二者的概念与区别,相关的书籍博客进行了各类阐述,较为繁杂。(下图显示了其中一部分)

线程(thread) vs.进程(process) 操作系统,多线程基本概念

本文从底层结构中去分析二者的区别,进而可以轻松理解二者在宏观上的差别。

进程结构

线程(thread) vs.进程(process) 操作系统,多线程基本概念
进程与进程之间相互独立,是操作系统进行资源分配与调度的独立单位,包含独立的逻辑内存空间(如32位操作系统,每个进程逻辑内存大小为4G),若干线程和线程间共享的文件与句柄。

线程结构

线程(thread) vs.进程(process) 操作系统,多线程基本概念
线程是程序实际运行的单元,内部包含栈(用于存储运行时数据,调用函数,返回地址等等),PC(存储运行指令或下一条指令的地址,指向内存)以及TLS(线程独立的存储空间,不与其它线程共享)。

因此,线程是程序实际运行的方式。进程是一个容器,将若干线程组合到一起,为多个线程分配共享的逻辑内存和资源,进行调度。线程与线程之间相互独立,不能直接交互。