什么是进程呢?
操作系统为正在运行的程序提供的抽象,就是所谓的进程(process)。一个进程只是一个正在运行的程序。在任何时刻,我们都可以清点它在执行过程中访问或影响的系统的不同部分,从而概括一个进程。为了理解构成进程的是什么,我们必须理解它的机器状态(machine state):程序在运行时可以读取或更新的内容。
在任何时刻,机器的哪些部分对执行该程序很重要?进程的机器状态有一个明显组成部分,就是它的内存。指令存在内存中。正在运行的程序读取和写入的数据也在内存中。因此进程可以访问的内存(称为地址空间,address space)是该进程的一部分。
进程的机器状态的另一部分是寄存器。许多指令明确地读取或更新寄存器,因此显然,它们对于执行该进程很重要。请注意,有一些非常特殊的寄存器构成了该机器状态的一部分。例如,程序计数器(Program Counter,PC)(有时称为指令指针,Instruction Pointer或IP)告诉我们程序当前正在执行哪个指令;类似地,栈指针(stack pointer)和相关的帧指针(frame pointer)用于管理函数参数栈、局部变量和返回地址。
什么是线程呢?
线程是系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。进程——资源分配的最小单位,线程——程序执行的最小单位。与进程(process)类似,线程(thread)是允许应用程序并发执行多个任务的一种机制。一个进程可以包含多个线程。同一程序中的所有线程均会独立执行相同程序,且共享同一份全局内存区域,其中包括初始化数据段(initialized data)、未初始化数据段(uninitialized data),以及堆内存段(heap segment)。
线程和进程的区别
-
区别一:
简单地讲,任何的一个程序都必须有且有一个以上的进程,而相对于一个进程而言也必须要有且有一个以上的线程。相对于进程而言,对线程进行划分的尺度一般要小很多,这就导致了多线程的一些程序能够出现更高的并发性。 -
区别二
在执行进程的时候,一般会具有相互独立的多个内存单元。但是多个线程是可以共享内存的,这样运行效率就很大的程度上被提高了。相对于单个的独立线程而言都会有相应程序的运行入口以及一些程序等出口。线程就不一样了,它不能独立的去执行而必须要依附在相应的应用程序里面。这样的话应用程序就可以执行多个线程并进行相应的控制。 -
区别三
通过了解逻辑角度我们可以得知,多线程这样的意义是相对于在一个应用程序里面的,能够同时的执行。而操作系统不会认为多个线程就是多个独立应用,因此也就不会使其调度以及管理实现资源的分配。
简单地讲线程就是运行活动的集合,它是所有独立功能程序集中于一点的数据集合,进程是独立的单位,它是由系统来进行分配资源以及调度的。
换句话说线程可以是进程的实体,也就是CPU调度以及分派的一个很小的体系,可以说它要比进程小很多的基本单位。线程不具备任何的系统资源,它在同样一个进程里面与其他线程共享全部资源。其中一个线程既能够创建也可以撤销其他的线程。同样的,它们之间也能够并发的执行。