网站大量收购独家精品文档,联系QQ:2885784924

线程、多线程基本知识讲述.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C#线程基础知识 1. 相关概念 进程(process):进程就是当前运行的应用程序.进程由一个或多个线程以及程序在内存中的代码、数据和其他资源组成。程序资源通常有打开的文件、信号灯和动态分配的内存。 线程(thread):线程是操作系统分配处理器时间的基本单元.每个线程都维护异常处理程序、调度优先级和一组系统用于在调度该线程前保存线程上下文的结构。线程上下文包括为使线程在线程的宿主进程地址空间中无缝地继续执行所需的所有信息,包括线程的 CPU 寄存器组和堆栈。 dotnet framework中的两个线程类:托管线程(System.Threading.Thread);操作系统线程(System.Diagnostics.ProcessThread). 在托管环境中,对线程的管理都是通过Thread类来完成的. 2. Thread ThreadPool 的一些背景知识 CLR 目前的多线程技术依然是 Windows 操作系统所提供的,不过 .NET CLR 开发小组似乎保留了将其分离的权利。在某些环境,CLR 线程并不会直接映射到一个 Windows 线程上,他们可能会用 Windows fiber 来代替,以期获得更好的执行性能。未来的 CLR 版本甚至会直接用某个已存在的空闲线程来代替 new Thread() 执行其他任务。CLR 线程使用了 Windows 线程开发的很多技巧,这样我们可以使用简单的代码来处理原本需要花费很多精力才能完成的工作。这种包装分离带来的另外一个好处就是,我们无需改动我们的代 码就能获得 CLR 和操作系统升级带来的性能提升。 除了直接使用 CLR 线程,我们还可以使用 Thread.BeginThreadAffinity() 等手段直接使用操作系统级别的线程,只不过要记得调用相关方法去 End。 早 期的 DOS 和 Windows 16-bit 都是单线程操作系统,这种操作系统上的某个进程一旦陷入死循环,整个操作系统都完蛋,你能做的只有重启计算机。Windows NT 3.1 是微软开发的第一个支持多线程功能的操作系统,这从某种程度上可以说是 Windows 成为 健壮性 操作系统的标志。在支持多线程的操作系统里,每个进程都拥有自己的线程,也就是说理论上不会陷入上述那样的尴尬状况了。死循环的线程被冻结,而其他线程依 旧能正常运转,用户也就有机会强行结束那个死掉的家伙。 严格来说,线程是一笔昂贵的开支。创建线程并不简单,首先得分配并初始化一个线程 内核对象(thead kernel object),并为这个线程保留 1MB user-mode stack 和 12KB 以上的 kernel-mode stack。在完成这些之后,线程才被创建。Windows 会发送消息通知目标进程以及其所有 DLL 线程可用。而销毁线程同样需要发送消息通知,最后还得释放所有的保留空间。 在单 CPU 计算机上,任何时候都只有一个线程在执行。Windows 保持线程对象状态,并决定接下来哪个线程会被执行。每个线程每次大概可以获得 20 毫秒的 CPU 执行时间片,然后切换执行另外一个线程。这个过程有个专业术语叫 线程上下文切换(context switch)。操作系统需要花费相当代价才能走完一次切换: (1) 进入内核模式。 (2) 将 CPU 寄存器信息保存到当前正在执行的线程内核对象。 (3) 获取一个 Spinlock,按计划决定下一个要执行的线程,然后释放 Spinlock。如果下一个线程属于其他的进程,那么我们还得为虚拟地址交换付出更多代价。 (4) 从要被执行的线程内核对象载入 CPU 寄存器信息。 (5) 离开内核模式。 所有这些操作可能导致操作系统和应用程序比单线程操作系统执行得更慢,但这些都是值得的,芯片生产商带来的超线程(hyper-threading)和多核 (mulit-core) CPU 为多线程提供了真正的舞台,每个内核上都可以真正并发执行一个线程。超线程 CPU 包含两个逻辑内核,每个逻辑内核都拥有自己的寄存器,只是它们需要共享 CPU 缓存等资源。当一个逻辑 CPU 因某种原因被暂停,芯片会切换到另外一个逻辑 CPU 继续执行任务,超线程芯片能带来 10% - 30% 左右的性能提升。而像 Pentium D、Athlon 64 X2 这类真正的多核 CPU 芯片,它们集成了多个真正意义上的物理内核,每个内核都有自己的完整的寄存器和缓存,这才是 100% 的性能提升。现在某些服务器用的芯片会同时使用多核和超线程技术,因此你可能在任务管理器中看到 4 个或 8 个 CPU 显示。芯片发展已经从单纯的主频提升转移到多核集成上来,不久我

文档评论(0)

0520 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档