线程、多线程基本知识

线程、多线程基本知识

ID:9085991

大小:76.50 KB

页数:15页

时间:2018-04-17

线程、多线程基本知识_第1页
线程、多线程基本知识_第2页
线程、多线程基本知识_第3页
线程、多线程基本知识_第4页
线程、多线程基本知识_第5页
资源描述:

《线程、多线程基本知识》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、C#线程基础知识1.相关概念进程(process):进程就是当前运行的应用程序.进程由一个或多个线程以及程序在内存中的代码、数据和其他资源组成。程序资源通常有打开的文件、信号灯和动态分配的内存。线程(thread):线程是操作系统分配处理器时间的基本单元.每个线程都维护异常处理程序、调度优先级和一组系统用于在调度该线程前保存线程上下文的结构。线程上下文包括为使线程在线程的宿主进程地址空间中无缝地继续执行所需的所有信息,包括线程的CPU寄存器组和堆栈。dotnetframework中的两个线程类:托管线程(System.Threading.Thread);

2、操作系统线程(System.Diagnostics.ProcessThread).在托管环境中,对线程的管理都是通过Thread类来完成的.2.Thread&ThreadPool的一些背景知识CLR目前的多线程技术依然是Windows操作系统所提供的,不过.NETCLR开发小组似乎保留了将其分离的权利。在某些环境,CLR线程并不会直接映射到一个Windows线程上,他们可能会用Windowsfiber来代替,以期获得更好的执行性能。未来的CLR版本甚至会直接用某个已存在的空闲线程来代替"newThread()"执行其他任务。CLR线程使用了Windows

3、线程开发的很多技巧,这样我们可以使用简单的代码来处理原本需要花费很多精力才能完成的工作。这种包装分离带来的另外一个好处就是,我们无需改动我们的代码就能获得CLR和操作系统升级带来的性能提升。除了直接使用CLR线程,我们还可以使用Thread.BeginThreadAffinity()等手段直接使用操作系统级别的线程,只不过要记得调用相关方法去"End"。早期的DOS和Windows16-bit都是单线程操作系统,这种操作系统上的某个进程一旦陷入死循环,整个操作系统都完蛋,你能做的只有重启计算机。WindowsNT3.1是微软开发的第一个支持多线程功能的操

4、作系统,这从某种程度上可以说是Windows成为"健壮性"操作系统的标志。在支持多线程的操作系统里,每个进程都拥有自己的线程,也就是说理论上不会陷入上述那样的尴尬状况了。死循环的线程被冻结,而其他线程依旧能正常运转,用户也就有机会强行结束那个死掉的家伙。严格来说,线程是一笔昂贵的开支。创建线程并不简单,首先得分配并初始化一个线程内核对象(theadkernelobject),并为这个线程保留1MBuser-modestack和12KB以上的kernel-modestack。在完成这些之后,线程才被创建。Windows会发送消息通知目标进程以及其所有DLL

5、线程可用。而销毁线程同样需要发送消息通知,最后还得释放所有的保留空间。在单CPU计算机上,任何时候都只有一个线程在执行。Windows保持线程对象状态,并决定接下来哪个线程会被执行。每个线程每次大概可以获得20毫秒的CPU执行时间片,然后切换执行另外一个线程。这个过程有个专业术语叫"线程上下文切换(contextswitch)"。操作系统需要花费相当代价才能走完一次切换:(1)进入内核模式。(2)将CPU寄存器信息保存到当前正在执行的线程内核对象。(3)获取一个Spinlock,按计划决定下一个要执行的线程,然后释放Spinlock。如果下一个线程属于其

6、他的进程,那么我们还得为虚拟地址交换付出更多代价。(4)从要被执行的线程内核对象载入CPU寄存器信息。(5)离开内核模式。所有这些操作可能导致操作系统和应用程序比单线程操作系统执行得更慢,但这些都是值得的,芯片生产商带来的超线程(hyper-threading)和多核(mulit-core)CPU为多线程提供了真正的舞台,每个内核上都可以真正并发执行一个线程。超线程CPU包含两个逻辑内核,每个逻辑内核都拥有自己的寄存器,只是它们需要共享CPU缓存等资源。当一个逻辑CPU因某种原因被暂停,芯片会切换到另外一个逻辑CPU继续执行任务,超线程芯片能带来10%-

7、30%左右的性能提升。而像PentiumD、Athlon64X2这类真正的多核CPU芯片,它们集成了多个真正意义上的物理内核,每个内核都有自己的完整的寄存器和缓存,这才是100%的性能提升。现在某些服务器用的芯片会同时使用多核和超线程技术,因此你可能在任务管理器中看到4个或8个CPU显示。芯片发展已经从单纯的主频提升转移到多核集成上来,不久我们就可以使用4核、8核,甚至是更多更强大的多核处理器。创建和销毁线程代价不菲,过多的线程会消耗掉大量的内存和CPU资源。为了改善这种状况,CLR提供了一种称之为"线程池(threadpool)"的技术。直观来说,线程

8、池就是为应用程序提供的一堆可用线程集合,线程池在进程所有应用程序域(AppDom

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

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

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