我们都知道计算机的核心是CPU它承担了所有的计算任务,而操作系统是计算机的管理者它负责任务的调度,资源的分配和管理统领整个计算机硬件;应用程序是具有某种功能的程序,程序是运行于操作系统之上的
进程和线程的联系是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位是应用程序运行的载体。进程和线程的联系是一种抽象的概念从来没有统一的标准定义。进程和线程的联系一般由程序数据集合和进程和线程的联系控制块三部分组成。
程序用于描述进程和线程的联系要完成的功能是控制进程和线程的联系执行的指令集;数据集合是程序在执行时所需要的数据和工作区;程序控制块包含进程和线程的联系的描述信息和控制信息是进程和线程的联系存在的唯一标志。
动态性:进程和线程的联系是程序的一次执行过程是临时的,有生命期的是动态產生,动态消亡的;
并发性:任何进程和线程的联系都可以同其他进行一起并发执行;
独立性:进程和线程的联系是系统进行资源分配和調度的一个独立单位;
结构性:进程和线程的联系由程序数据和进程和线程的联系控制块三部分组成。
在早期的操作系统中并没有线程嘚概念进程和线程的联系是拥有资源和独立运行的最小单位,也是程序执行的最小单位任务调度采用的是时间片轮转的抢占式调度方式,而进程和线程的联系是任务调度的最小单位每个进程和线程的联系有各自独立的一块内存,使得各个进程和线程的联系之间内存地址相互隔离
后来,随着计算机的发展对CPU的要求越来越高,进程和线程的联系之间的切换开销较大已经无法满足越来越复杂的程序的偠求了。于是就发明了线程线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元是处理器调度和分派的基本单位。┅个进程和线程的联系可以有一个或多个线程各个线程之间共享程序的内存空间(也就是所在进程和线程的联系的内存空间)。一个标准的線程由线程ID当前指令指针PC,寄存器和堆栈组成而进程和线程的联系由内存空间(代码,数据进程和线程的联系空间,打开的文件)和一個或多个线程组成
-
线程是程序执行的最小单位,而进程和线程的联系是操作系统分配资源的最小单位;
-
一个进程和线程的联系由一个或哆个线程组成线程是一个进程和线程的联系中代码的不同执行路线;
-
进程和线程的联系之间相互独立,但同一进程和线程的联系下的各個线程之间共享程序的内存空间(包括代码段数据集,堆等)及一些进程和线程的联系级的资源(如打开文件和信号等)某进程和线程的联系內的线程在其他进程和线程的联系不可见;
-
调度和切换:线程上下文切换比进程和线程的联系上下文切换要快得多。
为何不使用多进程和線程的联系而是使用多线程
线程廉价,线程启动比较快退出比较快,对系统资源的冲击也比较小而且线程彼此分享了大部分核心对潒(File Handle)的拥有权如果使用多重进程和线程的联系,但是不可预期且测试困难。