- 1、本文档共24页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
进程与线程详解
继承与线程详解
一、 简介
进程(process)是一块包含了某些资源的内存区域。操作系统利用进程把它的工作划分为一些功能单元。
进程中所包含的一个或多个执行单元称为线程(thread)。进程还拥有一个私有的虚拟地址空间,该空间仅能被它所包含的线程访问。
当运行NET程序时,进程还会把被称为CLR的软件层包含到它的内存空间中。上一章曾经对CLR做了详细描述。该软件层是在进程创建期间由运行时宿主载入的。
线程只能归属于一个进程并且它只能访问该进程所拥有的资源。当操作系统创建一个进程后,该进程会自动申请一个名为主线程或首要线程的线程。主线程将执行运行时宿主, 而运行时宿主会负责载入CLR。
应用程序(application)是由一个或多个相互协作的进程组成的。例如,Visual Studio开发环境就是利用一个进程编辑源文件,并利用另一个进程完成编译工作的应用程序。
在Windows NT/2000/XP操作系统下,我们可以通过任务管理器在任意时间查看所有的应用程序和进程。尽管只打开了几个应用程序,但是通常情况下将有大约30个进程同时运行。 事实上,为了管理当前的会话和任务栏以及其他一些任务,系统执行了大量的进程。
进程
1 简介
在运行于32位处理器上的32位Windows操作系统中,可将一个进程视为一段大小为4GB(232字节)的线性内存空间,它起始于0束于0xFFFFFFFF。这段内存空间不能被其他进程所访问,所以称为该进程的私有空间。这段空间被平分为两块,2GB被系统所有,剩下2GB被用户所有。
如果有N个进程运行在同一台机器上,那么将需要N×4GB的海量RAM,还好事实并非如此。
Windows是按需为每个进程分配内存的,4GB是32位系统中一个进程所占空间的上限。
将进程所需的内存划分为4KB大小的内存页,并根据使用情况将这些内存页存储在硬盘上或加载到RAM中,通过系统的这种虚拟内存机制,我们可以有效地减少对实际内存的需求量。当然这些对用户和开发者来说都是透明的。
SystemDiagnosticsProcess类
SystemDiagnosticsProcess类的实例可以引用一个进程,被引用的进程包含以下几种。
该实例的当前进程。
本机上除了当前进程的其他进程。
远程机器上的某个进程。
通过该类所包含的方法和字段,可以创建或销毁一个进程,并且可以获得一个进程的相关信息。下面将讨论一些使用该类实现的常见任务。
创建和销毁子进程
下面的程序创建了一个称为子进程的新进程。在这种情况下,初始的进程称为父进程。子进程启动了一个记事本应用程序。父进程的线程在等待1秒后销毁该子进程。该程序的执行效果就是打开并关闭记事本。
例1
静态方法Start()可以使用已存在的Windows文件扩展名关联机制。例如,我们可以利用下面的代码执行同样的操作。
默认情况下,子进程将继承其父进程的安全上下文。但还可以使用ProcessStart()方法的一个重载版本在任意用户的安全上下文中启动该子进程,当然需要通过一个SystemDiagnostics ProcessStartInfo类的实例来提供该用户的用户名和密码。
避免在一台机器上同时运行同一应用程序的多个实例
有些应用程序需要这种功能。实际上,通常来说在同一台机器上同时运行一个应用程序的多个实例并没有意义。
直到现在,为了在Windows下满足上述约束,开发者最常用的方法仍然是使用有名互斥体(named mutex)技术。然而采用这种技术来满足上述约束存在以下缺点:
该技术具有使互斥体的名字被其他应用程序所使用的较小的、潜在的风险。在这种情况下该技术将不再有效并且会造成很难检测到的bug。
该技术不能解决我们仅允许一个应用程序产生N个实例这种一般的问题。
幸而在System.Diagnostics.Process类中拥有GetCurrentProcess()(返回当前进程)和GetPro- cesses()(返回机器上所有的进程)这样的静态方法。在下面的程序中我们为上述问题找到了一个优雅且简单的解决方案。
例2
通过方法参数指定了远程机器的名字后,GetProcesses()方法也可以返回远程机器上所有的进程。
终止当前进程
可以调用System.Environment类中的静态方法Exit(int exitCode)或FailFast(string message)终止当前进程。Exit()方法是最好的选择,它将彻底终止进程并向操作系统返回指定的退出代码值。之所以称为彻底终止是因为当前对象的所有清理工作以及finally块的执行都将由不同的线程完成。当然,终止进程将花费一定的时间。
顾名思义,FailFa
您可能关注的文档
- 岑河镇公开招聘考试准考证.doc
- 性感从小培养.doc
- 2012诺贝尔经济学奖理论(速配算法).ppt
- MOSFET的基本原理特点及应用.doc
- 数据化建设与管理之商品管理.ppt
- 点和圆的位置关系测试.doc
- 中考化学计算经典题型做一抵十.doc
- 新人教版六年级数学上册第一单元试题.doc
- 3-0Twido系列PLC指令系统概述.ppt
- 科室管理执行力流程再造研究.doc
- 2025年贵州工业职业技术学院高职单招高职单招英语2016-2024历年频考点试题含答案解析.docx
- 2025年西昌民族幼儿师范高等专科学校高职单招职业适应性测试近5年常考版参考题库含答案解析.docx
- 2025年西藏警官高等专科学校高职单招语文2018-2024历年参考题库频考点含答案解析.docx
- 2025年贵州工商职业学院高职单招职业技能测试近5年常考版参考题库含答案解析.docx
- 2025年贵州工商职业学院高职单招职业适应性测试近5年常考版参考题库含答案解析.docx
- 2025年贵州农业职业学院高职单招数学历年(2016-2024)频考点试题含答案解析.docx
- 2025年贵州工商职业学院高职单招高职单招英语2016-2024历年频考点试题含答案解析.docx
- 2025年贵州工商职业学院高职单招语文2018-2024历年参考题库频考点含答案解析.docx
- 2025年许昌职业技术学院高职单招数学历年(2016-2024)频考点试题含答案解析.docx
- 2025年许昌职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析.docx
文档评论(0)