本文主要参考自孙钟秀主编的《操做系统教程》一书中关于进程和线程的部分。数据库
为何引入进程?服务器
一,刻画系统动态性,发挥系统并发性,提升资源利用率。网络
以C#为例,在编辑器Visual Studio Code写了几行代码,保存为cs文件。在未运行状态的下的代码,称之为静态的程序。静态的程序是一个相对的概念。当程序运行起来,它的运行依赖于处理器(CPU)和主存储器资源,我能够称之为动态的程序。以该程序动态执行的过程为基本单位,抽象出一个概念,进程,即进行中的程序。多线程
进程二字,主要是强调动态性。处理器调动进程,存储器为进程分配进程空间,为处理器分配调动控制进程的空间,进程所以建立。当资源不足,或者需等待某个事件发生,进程暂停执行。乃至最后进程运行结果,程序退出主存储器,进程消亡。进程的出现到消亡,无疑是在不断地动态变化。并发
二,解决共享性。编辑器
当你完成一个公用函数时,该函数能够被多个程序调用。
分布式
函数A在被程序甲调用,程序甲正在等待写入磁盘数据操做的返回,处理器空闲,为提升处理器利用效率,程序乙于此同时开始执行,进入起始点a。函数
此时,如何描述函数A?A处于等待点?A处于起始点a?试着引入进程的概念,将函数和程序联系起来,A对于程序甲构成进程A甲,A对于程序乙构成进程A乙。进程A甲处于等待点,进程A乙处于起始点。性能
进程(process)这个名词最先是1960年在MIT的MULTICS和IBM公司的 TSS/360系统中提出的,直到目前对进程的定义和名称均不统一,不一样的系统中采用不一样的术语名称,例如,MIT称进程(process),IBM公司称任务(task)和 Univac公司称活动(active)。能够说进程的定义多种多样,国内学术界较为一致的见解是:进程是一个可并发执行的具备独立功能的程序关于某个数据集合的一次执行过程,也是操做系统进行资源分配和保护的基本单位(1978 年全国操做系统学术会议)。操作系统
进程属性:
随着并行技术、网络技术和软件设计技术的发展,给并发程序设计效率带来了一系列新的问题,主要表如今:
若是说操做系统中引入进程的目的是为了使多个程序能并发执行,以改善资源使用率和提升系统效率,那么,在操做系统中再引入线程,则是为了减小程序并发执行时所付出的时空开销,使得并发粒度更细、并发性更好。
进程能够分为两项功能:一是独立分配资源,二是被调度分派执行。分配资源仍由进程实现,无需频繁切换。抽出线程的概念,将被调度分派执行的任务移交给线程,能够被频繁的调度和切换。
单线程(结构)进程(single threaded process):进程在任一时刻只有一个执行控制流
在单线程(结构)进程(single threaded process)中,进程和线程的概念能够不加区分。
多线程(结构)进程(multiple threaded process):
多线程环境中进程的定义:进程是操做系统中进行保护和资源分配的基本单位。
它具备:
而传统进程原先所承担的控制流执行任务交给称做线程的部分完成。
多线程环境中的线程概念:线程是操做系统进程中可以独立执行的实体(控制流),是处理器调度和分派的基本单位。线程是进程的组成部分,每一个进程内容许包含多个并发执行的实体(控制流),这就是多线程。同一个进程中的全部线程共享进程得到的主存空间和资源,但不拥有资源。
线程具备:
线程属性:
进程能够划分为两个部分:资源集合和线程集合。进程要支撑线程运行,为线程提供地址空间和各类资源,它封装了管理信息,包括对指令代码、全局数据和 I/O状态数据等共享部分的管理。线程封装了执行信息,包括对CPU寄存器、执行栈(用户栈、内核栈)和局部变量、过程调用参数、返回值等线程私有部分的管理。因为线程具备许多传统进程所具备的特征,因此也把线程称为轻量进程 LWP(Light-Weight Process)。