进程、线程与应用程序域的区别

1 进程

1.1 四个基本特征

进程由操作系统创建、管理的,离开了操作系统也就不谈什么进程了,先看看操作系统的四个基本特征:

  • 并发(concurrence)

并行性是指两个或者多个事件在同一时刻发生,这是一个具有微观意义的概念,即在物理上这些事件是同时发生的;而并发性是指两个或者多个事件在同一时间的间隔内发生,它是一个较为宏观的概念。
在多道程序环境下,并发性是指在一段时间内有多道程序在同时运行,但在单处理机的系统中,每一时刻仅能执行一道程序,故微观上这些程序是在交替执行 的。应当指出,通常的程序是静态实体,它们是不能并发执行的。为了使程序能并发执行,系统必须分别为每个程序建立进程。进程,又称任务,简单来说,是指在 系统中能独立运行并作为资源分配的基本单位,它是一个活动的实体。多个进程之间可以并发执行和交换信息。一个进程在运行时需要运行时需要一定的资源,如 cpu,存储空间,及i/o设备等。在操作系统中引入进程的目的是使程序能并发执行。

  • 共享 (sharing)

所谓共享是指,系统中的资源可供内存中多个并发执行的进程共同使用。由于资源的属性不同,故多个进程对资源的共享方式也不同,可以分为:互斥共享方式 和 同时访问方式

  • 虚拟 (virtual)

是指通过技术吧一个物理实体变成若干个逻辑上的对应物。在操作系统中虚拟的实现主要是通过分时的使用方法。显然,如果n是某一个物理设备所对应的虚拟逻辑设备数,则虚拟设备的速度必然是物理设备速度的1/n。

  • 异步 (asynchronism)

在多道程序设计环境下,允许多个进程并发执行,由于资源等因素的限制,通常,进程的执行并非“一气呵成”,而是以“走走停停”的方式运行。内存中每 个进程在何时执行,何时暂停,以怎样的方式向前推进,每道程序总共需要多少时间才能完成,都是不可预知的。或者说,进程是以异步的方式运行的。尽管如此, 但只要运行环境相同,作业经过多次运行,都会获得完全相同的结果,因此,异步运行方式是允许的。

1.2 进程的出现

操作系统为了使程序并发执行而产生了进程。

1.3 进程的定义和特征

进程的定义:可并发执行的程序在一个数据集合上的运行过程。

进程的特征:

  • 动态性 进程既然是进程实体的执行过程,因此进程是有一定的生命期。而程序只是一组有序指令的集合,并放在某种介质上,本身无运行的含义,因此程序是个静态的实体。
  • 并发性
  • 独立性  这是指进程实体是一个能独立运行的基本单位,同时也是系统种独立获得资源和调度的基本单位。
  • 异步性

结构特征 从结构上看,进程实体是由程序段、数据段及进程控制块三部分组成。
 (进程控制块(PCB):进程控制块是进程实体的一部分,它记录了操作系统所需要的、用于描述进程情况及控制进程运行所需的全部信息。os 是根据PCB来对并发执行的进程进行控制和管理的)

1.4 关于进程的总结

定义:可并发执行的程序在一个数据集合上的运行过程,每个进程有一个自己的地址空间以及一个单一的控制流程。
要解决的问题:为了使程序能并发执行,(要并发执行就要隔离进程,使进程独立,即每个进程有属于自己的数据段、程序段、进程控制块)
在.Net 之前,每一个应用程序被加载到单独的进程中,并为该进程指定私有的虚拟内存。进程不能直接访问物理内存,操作系统通过其它的处理把这些虚拟内存映射到物理 内存或IO设备的某个区域,而这些物理内存之间不会有重叠,这就决定了一个进程不可能访问分配给另一个进程的内存。相应地,运行在该进程中的应用程序也不 可能写入另一个应用程序的内存,这确保了任何执行出错的代码不会损害其地址空间以外的应用程序。在这种机制下,进程作为应用程序之间一个独立而安全的边界 在很大程度上提高了运行安全。
进程的缺点:是降低了性能。许多一起工作的进程需要相互通信,而进程却不能共享任何内存,你不能通过任何有意义的方式使用从一个进程传递到另一个进程的内存指针。此外,你不能在两个进程间进行直接调用。你必须代之以使用代理,它提供一定程度的间接性。

2 线程

2.1 线程的出现

我们首先回顾进程的两个基本属性:

  • 进程使一个可拥有资源的独立单位
  • 进程同时又是一个可以独立调度和分派的基本单位。

正是由于这两个基本属性,才使进程成为一个能独立运行的基本单位,从而构成了进程并发执行的基础。
由于进程是一个资源的拥有者,因而在进程的创建、撤销、和切换的过程中,系统必须为之付出较大的时空开销。为了解决这个问题,不少操作系统的学者们 想到:将进程的两个属性分开,由操作系统分开处理。即对作为调度和分派的基本单位,不同时作为独立分配资源的单位,以使之轻装运行;而对拥有资源的基本单 位,又不频繁地对之进行切换,在这种思想的指导下,产生了线程的概念。
线程引入的原因: 为了减少程序并发执行所付出的时空开销,使os具有更好的并发性。
在引入线程的os 中,线程是进程中的一个实体(进程中的一个或多个指令执行流),是被系统独立调度和分派的基本单位。线程基本上不再拥有系统资源,(只拥有一点在运行中必 不可少的资源,如程序计数器、寄存器和栈),但它可与同属一个进程的其他线程功能共享进程所拥有的全部资源。线一个线程可以创建和撤销另一个线程;同一进 程中的多个线程之间可以并发执行。
线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自 己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同 一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。

2 .2 关于线程的总结

出现的背景:由于进程是一个资源的拥有者,因而在进程的创建、撤销、和切换的过程中,系统必须为之付出较大的时空开销,限制了并发程度的进一步提高。
要解决的问题:解决进程的创建、撤销、和切换的过程中,系统必须为之付出较大的时空开销的问题
解决的方法:将进程的两个属性分开,由操作系统分开处理。把“独立调度、分配的基本单位”这个属性分离出来作为线程;而把进程作为资源拥有的基本单位,线程作为进程中的一个实体而存在。

3 应用程序域(AppDomain)

3.1 应用程序域的出现

在.Net中,应用程序有了一个新的边界:应用程序域(以下简称域)。它是一个用于隔离应用程序的虚拟边界。在.net出现以前,一个进程下,只能运行一个应用程序,而在,net出现后,一个进程下,可以运行多个应用程序,这都是因为应用程序域的出现。
.Net结构中,由于公共语言运行库能够验证代码是否为类型安全的代码,所以它可以提供与进程边界一样大的隔离级别,其性能开销也要低得多。

3.2 域与线程的关系

在.Net中,线程是公共语言运行库用来执行代码的操作系统构造。在运行时,所有托管代码均加载到一个域中,由特定的操作系统线程来运行。然而,域 和线程之间并不具有一一对应关系。在任意给定时间,单个域中可以执行不止一个线程,而且特定线程也并不局限在单个域内。也就是说,线程可以跨越域边界,不 为每个域创建新线程。当然,在指定时刻,每一线程都只能在一个域中执行。运行库会跟踪所有域中有哪些线程正在运行。通过调用.Net类库的 Thread.GetDomain 方法,你还可以确定正在执行的线程所在的域。

3.3 示例:在另一个应用程序域中执行代码

如果希望将该程序集加载到另外一个应用程序域中,可以使用 ExecuteAssembly 或 ExecuteAssemblyByName,或者使用这些方法的其他重载版本之一,参考在另一个应用程序域中执行代码(C# 编程指南)。
如果想从默认入口点以外的位置执行另一个程序集,可在远程程序集中定义一个从 MarshalByRefObject 派生的新类型。然后在应用程序中使用 CreateInstance 创建该类型的一个实例,参考跨越AppDomain边界访问对象。

时间: 2024-10-16 14:30:17

进程、线程与应用程序域的区别的相关文章

进程线程协程的区别

一.概念 1.进程 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信.由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈.寄存器.虚拟内存.文件句柄等)比较大,但相对比较稳定安全. 2.线程 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存

对进程、线程、应用程序域的理解

前几天面试的一道题是谈谈进程.线程.应用程序域的区别,虽然能说上来几点,但感觉理解的很肤浅.很不透彻,闲暇时从书箱里翻出尘封已久的<操作系统>(还好,毕业时偶没舍得卖),翻了翻进程的那一章.看之前我列出了下面三个问题:1. 这些概念(技术)出现的背景以及要解决的问题 (要干什么)2. 它们之间的联系与区别3. 三者之间的发展脉络 进程的出现:(复习功课嘛,就把相关的内容都看看了,哎,都忘的差不多了)  进程由操作系统创建.管理的,离开了操作系统也就不谈什么进程了,先看看操作系统的四个基本特征:

进程线程及其状态

进程线程及其状态 进程 进程的概念 进程就是执行中的程序. 进程的状态 进程有五种状态,分别是: 新建:进程正在被创建 运行:进程正在被执行 阻塞:进程等待某个事件(如I/O操作) 就绪:进程等待分配处理器 终止:进程完成执行 进程调度流程图 线程 线程的概念 线程是程序执行流的最小单元,线程早期也有轻量级进程之称.一个进程中可能包含多个线程.在系统内核层面,进程与线程并无本质的不同.进程与线程最大的不同点是资源分配. 线程与进程的比较 线程与进程都可以实现多任务. 线程是CPU调度的基本单元,

C#:进程、线程、应用程序域(AppDomain)与上下文分析

进程     进程是操作系统用于隔离众多正在运行的应用程序的机制.在.Net之前,每一个应用程序被加载到单独的进程中,并为该进程指定私有的虚拟内存.进程不能直接访问物理内存,操作系统通过其它的处理把这些虚拟内存映射到物理内存或IO设备的某个区域,而这些物理内存之间不会有重叠,这就决定了一个进程不可能访问分配给另一个进程的内存.相应地,运行在该进程中的应用程序也不可能写入另一个应用程序的内存,这确保了任何执行出错的代码不会损害其地址空间以外的应用程序.在这种机制下,进程作为应用程序之间一个独立而安

进程(process)线程(thread)应用程序域(domain) (from www.sysoft.cc)

进程(process)是windows的一个基本概念,它包括了运行一个程序的需要的所有资源.进程之间是相互独立的,一个进程无法访问另一个进程之间的数据(除非采用分步式计算方式),一个进程运行的失败也不会影响到另一个进程的运行.windows就是利用进程将工作划分为多个工作区域的.进程可以理解为一个程序 的基本边界.解决问题:要解决并发问题,即:使进程独立,就要使每个进程有属于自己的程序段,数据段,进程控制块. 应用程序域(domain),它提供安全通用的处理单元,公共语言运行库可以用它来进行应用

进程、线程与应用程序域

进程.线程与应用程序域 2015-06-15 目录 1 进程  1.1 四个基本特征  1.2 进程的出现  1.3 进程的定义和特征  1.4 关于进程的总结 2 线程  2.1 线程的出现  2.2 关于线程的总结3 应用程序域(AppDomain)  3.1 应用程序域的出现  3.2 域与线程的关系  3.3 示例:在另一个应用程序域中执行代码参考: 1 进程 返回 1.1 四个基本特征 进程由操作系统创建.管理的,离开了操作系统也就不谈什么进程了,先看看操作系统的四个基本特征: 并发(

进程和线程的概念,区别(理论知识)

进程和线程的概念,区别: 什么是线程????首先,计算机所有指令的执行都是CPU运算,CPU有规则,线程是操作系统能调度的最小单位线程可以简单理解为一堆指令做每一件事背后都是CPU在运算,例如画图.qq这些应用软件寄生在操作系统上画图和qq是独立的软件,各自分一块独立的内存空间硬盘--内存--CPU 慢--快为了安全,画图软件的内存不能访问qq的内存但是,qq或画图有一个整体的东西暴露给操作系统,这个整体的东西就是进程,里面包含对各种资源的调用例如内存的管理,网卡的调用等,对各种资源管理的集合称

进程、线程和协程区别

进程.线程和协程区别 1. 进程 进程是系统资源分配的最小单位, 系统由一个个进程(程序)组成一般情况下,包括文本区域(text region).数据区域(data region)和堆栈(stack region). 文本区域存储处理器执行的代码 数据区域存储变量和进程执行期间使用的动态分配的内存: 堆栈区域存储着活动过程调用的指令和本地变量. 因此进程的创建和销毁都是相对于系统资源,所以是一种比较昂贵的操作. 进程有三个状态: 等待态:等待某个事件的完成: 就绪态:等待系统分配处理器以便运行:

进程和线程的定义及区别、线程同步、进程通讯方式总结

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 一. 进程的概念 进程是在多道程序系统出现以后,为了描述系统内部各作业的活动规律而引进的概念. 由 于多道程序系统所带来的复杂环境,程序本身有了并行性[为了充分利用资源,在主存中同时存放多道作业运行,所以各作业之间是并行的].制约性[各程序由于 同时存在于主存中,因此他们之间会存在着相互依赖.相互制约的关系.一个是通过中间媒介--资源发生的间接制约关系,一个是各并行程序间需要相互协同而引 起