.NET论文_CLR对并行多线程的的支持

.NET论文_CLR对并行多线程的的支持

ID:38117122

大小:60.50 KB

页数:8页

时间:2019-06-06

.NET论文_CLR对并行多线程的的支持_第1页
.NET论文_CLR对并行多线程的的支持_第2页
.NET论文_CLR对并行多线程的的支持_第3页
.NET论文_CLR对并行多线程的的支持_第4页
.NET论文_CLR对并行多线程的的支持_第5页
资源描述:

《.NET论文_CLR对并行多线程的的支持》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、CLR对并行多线程的支持西安电子科技大学韩进巍对于当今的分时操作系统而言,所有的任务都是以进程的形式完成的,进程的调度策略相当于兵法里面的谋略战法,如果把进程比喻成军事里面的将,那么线程就是兵。操作系统控制着计算机里的软硬件资源,组织计算机工作流程以及用户的交互,操作系统就是计算机世界里的军委主席,调兵遣将,决胜千里。当然,古代的操作系统还不用这么麻烦,因为古代计算机的资源实在有限,单任务操作系统都可以胜任,比如DOS,生产力的发展,资源的增加,在呼唤着更有效的资源管理分配机制,使得资源们可以发挥其作用,必然的,管理是需要成本的,管理机制本身不得不变得越来越复杂。

2、进程的概念被引入到现代操作系统里之后,使得相互独立的应用程序对用户的响应可以宏观上并行化,更加有效的利用计算机资源。自然的,操作系统为用户给出了进程和线程相关的API,通过合理的应用这些操作系统特性,我们可以写出更有效的应用程序。现代的抽象编程语言,Java或.NET而非底层语言C,提供JVM、CLR这样的解释或编译支持,以及JDK,FCL这样的类库。抽象语言是对底层的抽象,对硬件和操作系统的API都应该有相应的映射,这使得程序员无需直接面对难以掌控的底层内存堆栈数据流等等东西。既然是一种抽象,当然,进程的概念就被完美的映射在了类库的空间里,类库对多线程有着完备的

3、表达能力,运行时支持也可以实现这些抽象了的线程操作描述。本文就讲述.NET对多线程并行化的支持。FCL对该功能提供API,CLR对其做出支持,那么,我们通过对FCL基础类库为多线程并行功能提供的接口来回答题目的问题。首先简单的介绍一下.NET类库,FCL类库大约有7000个类,这些类被分成了几个部分,被包含在二十多个命名空间下。比如说Collections,Drawing,IO,Xml,Diagnostics,Text,Threading,ComponentModel,Runtime,Data等。其中加粗的字体的Threading包含在多线程并行要用到的类。然后我

4、们回顾一下进程和线程的概念。说的白一点,正在执行的应用程序就是一个进程,对Window来说,进程是含有内存和资源并安置线程的地方。进程拥有的资源包括很多种类,在Windows里面,有文件句柄、线程、用户资源、GDI资源等等。进程往往是与某个任务挂钩。可以说,进程是一个带兵打仗的将军,军委主席操作系统将计算机资源交付给进程将军让进程去攻城略地。线程是进程将军的部下,线程是任务的实际执行者,军委主席和将军往往是坐镇指挥的,线程也有自己的资源线程内核是一个对象,还拥有一块1M左右的内核堆栈。操作系统调度管理进程,进程管理线程,有时也放心的让线程自我管理。现在我们跨出第一

5、步,走近线程,实际上我们在平时编程时不太会去真正用到多线程的,因为虽然多线程是好,但是很难用好。具体说首先就是多线程编程比较复杂,我们习惯了的是一行一行的执行编程模式,对于好的多线程程序来说要避免这一点使得任务分隔在多个处理器核中,这就要考虑多个线程使用一个进程空间里的资源要考虑资源的一致性问题,其次,还有调试复杂的因素,线程间互相依赖,出了错很难复制情景,最后,平台相关,每台机器上的核心数不同,操作系统中还有很多其他进程,运行环境复杂也是一个因素。本文的思路会按照线程的基本操作、线程同步的基本手段、线程池的思想和应用、关于多线程和并行的简单总结。线程的基本操作包

6、括线程的创建,线程的执行,线程的常用属性,线程的中断、线程的Join,变量的ThreadStatic特性。线程的创建使用如下方法:staticvoidThreadProc(){}//线程执行的内容,即委托方法threadt=newThread(newThreadStart(ThreadProc));//创建线程,构造线程对象t.start();//启动线程在构造线程对象的时候我们也可以用Lambda表达式,如下:threadt=newThread(()=>{Thread.Sleep(1000);//线程执行的内容放在此处,睡眠1000ms});//创建线程,构造线

7、程对象,将Lambda表达式传入构造方法t.start();//启动线程如果需要为线程传参则如下:(另外还说明了另一种启动线程的方式)newThread((date)=>{//将date转换为日期时间类型Console.WrtieLine(((DateTime)date).ToString());}).Start(DateTime.Now);//没有构造出的线程对象找标识符,创建出线程后立马调用了Start方法,并在Start中传入当前的参数。有个问题,就是传入的参数只能是一个,不支持多个参数,因此如果要参多个参数要自定义一个对象,包进去再拆出来。此外还可以使用一

8、个无参方法

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。