《C#并发编程经典实例》学习笔记-进程(process)和线程(thread)

本文主要参考自孙钟秀主编的《操做系统教程》一书中关于进程和线程的部分。数据库

进程

为何引入进程?服务器

一,刻画系统动态性,发挥系统并发性,提升资源利用率。网络

以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 年全国操做系统学术会议)操作系统

进程属性:

  1. 结构性。进程至少有三要素组成:程序块、数据块、进程控制块。
  2. 共享性。多个进程可共享相同的程序。
  3. 动态性。进程是动态的概念,有生命周期。程序做为一组有序指令的序列合集,是静态概念,程序能够做为一种系统资源永远存在。
  4. 独立性。进程既是系统中资源分配和保护的基本单位,也是系统调度的独立单位(单线程进程)。凡是未创建进程的程序,都不能做为独立单位参与运行。一般,每一个进程均可以各自独立的速度在 CPU上推动。
  5. 制约性:并发进程之间存在着制约关系,进程在进行的关键点上须要相互等待或互通消息,以保证程序执行的可再现性和计算结果的唯一性。
  6. 并发性:进程能够并发地执行,进程的并发性能改进资源利用率和提升系统效率。

线程

随着并行技术、网络技术和软件设计技术的发展,给并发程序设计效率带来了一系列新的问题,主要表如今:

  • 进程时空的开销大,频繁的进程调度将耗费大量处理器时间,要为每一个进程分配存储空间限制了操做系统中进程的总数。
  • 进程通讯的代价大,每次通讯均要涉及通讯进程之间或通讯进程与操做系统之间的信息传递。
  • 进程之间的并发性粒度较粗,并发度不高,过多的进程切换和通讯延迟使得细粒度的并发得不偿失。
  • 不适合并行计算和分布并行计算的要求,对于多处理器和分布式的计算环境来讲,进程之间大量频繁的通讯和切换,会大大下降并行度。
  • 不适合客户!服务器计算的要求。对于 C/S结构来讲,那些须要频繁输入输出并同时大量计算的服务器进程(如数据库服务器、事务监督程序)很难体现效率。

若是说操做系统中引入进程的目的是为了使多个程序能并发执行,以改善资源使用率和提升系统效率,那么,在操做系统中再引入线程,则是为了减小程序并发执行时所付出的时空开销,使得并发粒度更细、并发性更好。

进程能够分为两项功能:一是独立分配资源,二是被调度分派执行。分配资源仍由进程实现,无需频繁切换。抽出线程的概念,将被调度分派执行的任务移交给线程,能够被频繁的调度和切换。

进程和线程的相对概念

单线程(结构)进程(single threaded process):进程在任一时刻只有一个执行控制流
在单线程(结构)进程(single threaded process)中,进程和线程的概念能够不加区分。

多线程(结构)进程(multiple threaded process):

  • 在同一进程中设计出多条控制流;
  • 多控制流之间能够并行执行;
  • 多控制流切换不需经过进程调度;
  • 多控制流之间还能够经过内存区直接通讯,下降通讯开销

多线程环境中进程的定义:进程是操做系统中进行保护和资源分配的基本单位。
它具备:

  • 一个虚拟地址空间,用来容纳进程的映像;
  • 对处理器、其余(通讯的)进程、文件和 I/O资源等的有控制有保护的访问。

而传统进程原先所承担的控制流执行任务交给称做线程的部分完成。

多线程环境中的线程概念:线程是操做系统进程中可以独立执行的实体(控制流),是处理器调度和分派的基本单位。线程是进程的组成部分,每一个进程内容许包含多个并发执行的实体(控制流),这就是多线程。同一个进程中的全部线程共享进程得到的主存空间和资源,但不拥有资源。

线程具备:

  • 线程执行状态(运行、就绪、等待⋯⋯)。
  • 当线程不运行时,有一个受保护的线程上下文,用于存储现场信息。因此,观察线程的一种方式是运行在进程内一个独立的程序计数器。
  • 一个执行堆栈。
  • 一个容纳局部变量的主存存储区。

线程属性:

  1. 并发性:同一进程的多个线程可在一个或多个处理器上并发或并行地执行,而进程之间的并发执行演变为不一样进程的线程之间的并发执行。
  2. 共享性:同一个进程中的全部线程共享但不拥有进程的状态和资源,且驻留在进程的同一个主存地址空间中,能够访问相同的数据。因此,须要有线程之间的通讯和同步机制。通讯和同步的实现十分方便。
  3. 动态性:线程是程序在相应数据集上的一次执行过程,由建立而产生,至撤销而消亡,有其生命周期,经历各类状态的变化。每一个进程被建立时,至少同时为其建立一个线程,须要时线程能够再建立其余线程。
  4. 结构性:线程是操做系统中的基本调度和分派单位,所以,它具备唯一的标识符和线程控制块,其中应包含调度所需的一切私有信息。

进程能够划分为两个部分:资源集合和线程集合。进程要支撑线程运行,为线程提供地址空间和各类资源,它封装了管理信息,包括对指令代码、全局数据和 I/O状态数据等共享部分的管理。线程封装了执行信息,包括对CPU寄存器、执行栈(用户栈、内核栈)和局部变量、过程调用参数、返回值等线程私有部分的管理。因为线程具备许多传统进程所具备的特征,因此也把线程称为轻量进程 LWP(Light-Weight Process)。

相关文章
相关标签/搜索