进程简单的说就是一个正在运行的程序,包含了运行该程序所需要的一切资源以及内存分配。线程是进程的基本执行单元,在进程的入口点(类似main())创建的第一个线程称之为主线程。只有一个主线程的进程是线程安全的,因为一个程序中的数据只有一个线程在访问,但是只有一个线程的后果就是,如果实在执行一个复杂的操作时,因为运行的时间太长,对用户来说,就好像是请求没被响应一样。所以可以使用CreateThread()之类的Windows API函数另外产生次线程,每一个次线程都拥有与主线程一样的权限,线程之间相互独立,它们可以同时访问共享数据。拥有多线程会给我们带来一种大量的活动几乎在同一时间内完成,但是事实上,同时运行多个线程需要有多个CPU才行。因为实际上CPU将时间分成一个个的时间片(单位时间),按线程优先级分配时间片,当一个线程的时间片用完之后,它就会被挂起,执行下一个线程,由于时间片非常之短,计算机的运行速度有非常之快,故而导致一些操作看起来似乎是在同时发生响应。因而虽然多线程会相对的加快响应速度,但是线程过多的话性能反而会下降,因为CPU需要时间在线程之间进行转换。使用System.Diagnostics命名空间内定义的类,我们就可以使用编程的方式访问进程,

命名空间类名     作用
Process 提供了访问本地进程和的远程进程的功能,允许通过编程方式开始或结束进程
ProcessModule   代表一个加载到特定进程的模块(dll或者exe),它能代表任何模块(基于com、基于.Net或基于传统C的二进制程序)
ProcessModuleCollection 提供ProcessModule对象的强类型集合
ProcessStartInfo 指点通过Process.Start方法启动进程是使用的一组值
ProcessThread 代表指定进程中的线程。用于诊断一个进程的线程情况,并不用于在进程中创建线程
ProcessThreadCollection 提供ProcessThread对象的强类型集合

其中Process是比较常用的一个类,它提供了用于启动、关闭进程,设定进程优先级,以及获得进程中活动线程的列表并且加载给定进程的模块,下图是有关Process的一部分关键属性:

属性   作用
ExitTime 获取终止进程相关的时间戳
Handle 返回操作系统分配给进程的句柄(由IntPtr表示)。当构建与非托管代码交互的.Net程序时,该属性很有用
Id 获取关联的进程的ID
MachineName  获取关联进程运行的计算机名
MainWindowTitle 获取进程主窗口的标题(如果没有住窗口,则返回空字符串)
Modules 可以访问强类型ProcessModuleCollection,后者表示一组加载到当前进程的模块(dll或者exe)
ProcessName 获取进程的名称(应用程序本身的名称)
Responding 指示进程的用户界面是否响应用户输入(或者当前是否被挂起)
StartTime     获取关联进程开始的时间
Thread  

获取运行在关联进程中的一组线程的设置(由ProcessThread对象的集合表示)

以下则是该类的一些方法:

方法 作用
CloseMainWindow 通过向进程的主窗口发送关闭消息来关闭拥有用户界面的进程
GetCurrentProcess 这个静态方法返回新的Process对象以表示当前活动的进程
GetProcesses   这个静态方法返回运行在给定计算机上的新的Process对象
Kill   立即停止关联的进程
Start   启动一个进程

在使用GetProcesses()方法返回一个Process对象组的时候,使用”.“符号即表示为本机,静态方法Process.GetProcessById通过关联的PID获取特定的进程,但是若是所指定的PID不存在,就会引发异常,还需要记住的是PID肯定不能为0,因为0是用来表示cpu空闲状态的。当使用Process.Modules属性访问ProcessModuleCollection时,可以列举出承载在进程中的所有模块:基于.Net、基于COM、基于传统C的库。还得说一下,模块这个词用于描绘承载于指定进程中的dll或者exe。在使用Kill方法结束进程的时候要注意该进程是否已经被结束,若是已经被结束了,再使用Kill()时,就会报错。

在.Net平台下,可执行程序会承载在一个进程的逻辑分区内,而非托管的程序是直接承载的,这个逻辑分区被命名为应用程序域,一个进程可以承载多个应用程序域,每个应用程序域之间都是相互隔离的,因此如果不使用分布式编程协议(如WCF),运行在某个应用程序域中的应用程序将无法访问其他应用程序中的任何数据,不论是全局的或是静态的。但是操作系统进程却只能承载默认的应用程序域。.NET平台运行我们使用System.AppDomain类,监控应用程序域、在运行时新建应用程序域、向新的应用程序域加载程序集等多种任务。

方法 作用
CreateDomain 该静态方法在当前进程中创建一个新的应用程序域
CreateInstance  在加载程序集到调用的应用程序域时,在外部程序集文件中创建指定类型的新实例
EXecuteAssembly 根据文件名在应用程序中执行程序集
GetAssemblies  获取已经加载到此应用程序域中的.Net程序集
GetCurrentThreadId   该静态方法返回当前应用程序域上活动的线程Id
Load   动态加载程序集到当前的应用程序域
Unload   该静态方法在进程中卸载指定的应用程序域
属性 作用
BaseDirectory 获取目录路径,程序集解决程序用它来探测程序集
CurrentDomain 该静态属性获取当前执行线程所在的应用程序域
FriendLyName 获取当前应用程序域的友好名称
MonitoringIsEnable 获取或设置一个值,该值指示是否对当前进程启用应用程序域的cpu和内存监控,一旦对进程启用了监控,则无法将其禁用
SetupInformation 获取给定应用程序域的配置信息,表示为一个AppDomainSetup对象
事件 作用
AssemblyLoad 在加载程序集到内存时发生
AssemblyResolve 在对程序集的解析失败时发生
DomainUnload 在即将从主进程中卸载AppDomain时发生
FirstChanceException 在应用程序域抛出异常时,该事件将在CLR找到合适的catch语句之前触发
ProcessExit 当默认应用程序的父进程退出时,在默认应用程序域上发生
UnhandledException 在异常处理程序未捕捉到异常时

应用程序域再次分出上下文边界用于存放对象,见书本P525

http://www.cnblogs.com/leslies2/archive/2012/03/06/2379235.html#c

《精通C#》第十七章的更多相关文章

  1. 进击的Python【第十七章】:jQuery的基本应用

    进击的Python[第十七章]:jQuery的基本应用

  2. <构建之法>第十三章到十七章有感以及这个项目读后感

    <构建之法>第十三章到十七章有感 第13章:软件测试方法有哪些? 主要讲了软件测试方法:要说有什么问题就是哪种效率最高? 第14章:质量保障 软件的质量指标是什么?怎么样能够提升软件的质量 ...

  3. 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索

    第三十六~三十七章.搜索智能提示suggestion,附近地点搜索 作者:July.致谢:caopengcs.胡果果.时间:二零一三年九月七日. 题记 写博的近三年,整理了太多太多的笔试面试题,如微软 ...

  4. 《Linux命令行与shell脚本编程大全》 第二十七章 学习笔记

    第二十七章:shell脚本编程进阶 监测系统统计数据 系统快照报告 1.运行时间 uptime命令会提供以下基本信息: 当前时间 系统运行的天数,小时数,分钟数 当前登录到系统的用户数 1分钟,5分钟 ...

  5. [汇编学习笔记][第十七章使用BIOS进行键盘输入和磁盘读写

    第十七章 使用BIOS进行键盘输入和磁盘读写 17.1 int 9 中断例程对键盘输入的处理 17.2 int 16 读取键盘缓存区 mov ah,0 int 16h 结果:(ah)=扫描码,(al) ...

  6. 第十七章——配置SQLServer(3)——配置“对即时负载的优化”

    原文:第十七章--配置SQLServer(3)--配置"对即时负载的优化" 前言: 在第一次执行查询或者存储过程时,会创建执行计划并存储在SQLServer的过程缓存内存中.在很多 ...

  7. 第十七章——配置SQLServer(4)——优化SQLServer实例的配置

    原文:第十七章--配置SQLServer(4)--优化SQLServer实例的配置 前言: Sp_configure 可以用于管理和优化SQLServer资源,而且绝大部分配置都可以使用SQLServ ...

  8. 第十七章——配置SQLServer(2)——32位和64位系统中的内存配置

    原文:第十七章--配置SQLServer(2)--32位和64位系统中的内存配置 前言: 本文讲述32位和64位系统中的内存配置,在SQLServer 2005/2008中,DBA们往往尝试开启AWE ...

  9. 第十七章——配置SQLServer(1)——为SQLServer配置更多的处理器

    原文:第十七章--配置SQLServer(1)--为SQLServer配置更多的处理器 前言: SQLServer提供了一个系统存储过程,SP_Configure,可以帮助你管理实例级别的配置.微软建 ...

  10. CSS3秘笈复习:十三章&十四章&十五章&十六章&十七章

    第十三章 1.在使用浮动时,源代码的顺序非常重要.浮动元素的HTML必须处在要包围它的元素的HTML之前. 2.清楚浮动: (1).在外围div的底部添加一个清除元素:clear属性可以防止元素包围浮 ...

随机推荐

  1. java 建造者模式

    package de.bvb.test3; /** * 建造者模式: 假如一个类有4个字段,每个字段或者每几个字段的组合都需要设置为构造函数,构造函数就比较麻烦 * 而且如果再加一个字段进去也不好拓展 ...

  2. Java设计模式(二)——迭代模式

    迭代模式的基本定义:对于一组对象集合(数组.堆栈.列表或散列),用户无需关心它的底层实现而能够通过调用统一接口遍历当中的所有元素.由于jdk已经对常见的迭代模式实现了封装,本文直接提供Collecti ...

  3. IOS 修改UIAlertController的按钮标题的字体颜色,字号,内容

    IOS 修改UIAlertController的按钮标题的字体颜色,字号,内容 UIAlertController *alertVC = [UIAlertController alertControl ...

  4. Paxos算法与Zookeeper分析

    1 Paxos算法 1.1 基本定义 算法中的参与者主要分为三个角色,同时每个参与者又可兼领多个角色: ⑴proposer 提出提案,提案信息包括提案编号和提议的value; ⑵acceptor 收到 ...

  5. [转]hibernateTools工具安装及使用总结(eclipse 3.6)

    转载地址:http://blueblood79.iteye.com/blog/773177 最近项目采用flex+spring+hibernate的框架开发,之前虽说有多年的Java开发经验了,但是一 ...

  6. git的一些命令行

    以下代码均在命令行中执行:在目标文件夹目录下: 1.初始化一个Git仓库,使用git init命令. 2.添加文件到Git仓库,分两步: 第一步,使用命令git add <file>,注意 ...

  7. 在iOS中使用OpenSSL的Public Key 进行加密

    这几天一直潜心于iOS开发,刚好把遇到的问题都记录一下.这次遇到的问题就是如果根据得到的Public Key在iOS 客户端对用户名和密码进行加密. Public Key如下: -----BEGIN ...

  8. RStudio中,出现中文乱码问题的解决方案

    RStudio中,出现中文乱码问题的解决方案解决步骤:1.设置RStudio文本显示的默认编码:RStudio菜单栏的Tools -> Global Options2.选择General -&g ...

  9. MyBatis支持的jdbcType类型

    BIT         FLOAT      CHAR           TIMESTAMP       OTHER       UNDEFINED TINYINT     REAL       V ...

  10. js 不同进制之间相互转换

    如果a进制与b进制都不等于10,则十进制作为桥梁进行转换 例如 10进制的数字11 转换为3进制为102 10进制的数字11 转换为4进制为23 现在进行3进制转4进制 1.3进制转10进制 2.10 ...