浅谈.Net下的多线程和并行计算(全集).pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
浅谈.Net下的多线程和并行计算(全集).pdf

作者信息 1 IT 工程技术网, 浅谈.NET 下的多线程和并行计算 声明:以下文字由关注IT人所关注的,IT工程技术网 ()根据网络文章整理提供,只为传递知 识之目的,如有权利人对此持有异议,请提供权利证明告知 我们。 作者信息 作者:lovecindywang lovecindywang的个人主页 1. 前言 作为一个ASP.NET 开发人员,在之前的开发经历中接触多线程编程的机会并不是很多,但 是随着.NET 4.0 的发布临近,我越来越感受到未来的1-2 年中并行计算将会有很大的应用。 于是决定通过写日志的方式来总结一下.NET 3.5 下的多线程编程进而引入.NET 4.0 提供 的新的并行库以及新的并行编程模式和编程的思维方式。 个人觉得在日常的编程中对于ASP.NET 程序员来说使用多线程编程不是很多,其实我们无 时无刻不在享受多线程的优势。首先,WEB 服务器环境就是一个多线程环境,每一个请求 都是独立的线程,如果没有多线程很难想象只能同步处理一个请求的WEB 服务器有什么用, 类似,我们的数据库也应该是一个多线程环境。对于Windows 应用程序的程序员来说恐怕 就很难不接触多线程了,最简单的就是我们会新开线程去做一些耗时的操作,这样就可以避 免UI 停止响应,在操作结束后再把操作结果应用在主线程的控件上。虽然说这样的应用是 多线程,甚至很多程序员习惯什么操作都新开一个线程去做,但是我觉得这样的多线程应用 的思维还停留在单核时代,在多核时代,我们确实可以让任务实际的并行执行而不是看上去 并行执行。 首先来说说概念,进程和线程的基本的概念不用多说,自然我们也能理解一个进程至少包含 一个线程。通过在一个进程中开启多个线程,我们就可以让一个程序在同一时间看上去能做 多个事情,比如可以在接受用户响应的时候进行一些计算。在以前处理器往往只有一个核心, 也就是说在同一时间,处理器只能做一件事情。那么怎么实现之前说的多个线程同时执行呢。 其实这个同时只是表面上看上去同时,本质上多个线程依次占用处理器的若干时间片,大家 前言 2 IT 工程技术网, 轮流使用其资源,由于这个时间片非常短,所以在一个长的时间看来似乎是几个线程同时得 到了执行。 举一个生动的例子,我们经常看到有一些画家能同时在一个画布上画两个不同的图片,一个 画人一个画房子,最后一起完成这个画。但仔细看的话发现,他是两手拿了两只画笔,在这 里画一笔那里画一笔,在同一时间其实也只有一只笔在画。这个画家应该也像普通人一样是 单核的,只是线程切换比较快罢了。我经常在打电话的时候和网友进行聊天,在同一时间做 两件事情,但是这样很费脑子,在打字前我要回忆一下刚才聊天的内容,然后输入聊天的文 字,然后再去回想一下刚才那哥们说了啥,在电话里面回他一句,这种回忆的工作就是准备 线程的上下文,交给脑子去处理。虽然同一时间是做了两件事情,但是这个上下文的准备工 作也浪费了点时间,如果我在打电话网络聊天的同事在去做第三件事情比如看电影,那我估 计就不行了。所以,线程也不能开的很多,特别对于人脑来说。但是对于电脑处理器来说就 不一样了,你只要准备好数据和指令他执行就是了,至于这些事情来自几件事情它不关心, 24 小时一秒都不浪费在执行指令完全没问题,当然你也可以让它闲着。 您可能会想了,既然线程切换需要时间,那么我们开两个线程执行两个任务不是还没有一个 一个执行来的快吗?其实即使对于单核的处理器都不一定,因为在实际的应用中我们的任务 往往不可能从头计算到尾一直占用处理器资源,在很多时候我们要等待IO 响应或用户的响 应,如果只是一个线程做事情的话处理器太闲了。对于现在多核的处理器来说,在同一时刻 理论上可以在每一个处理器上都并行执行指令,我们就更需要利用多线程来提高运算速度了。 当然也不是说一个任务要执行10秒,我们在双核的机器上并行执行这个任务只需要5秒了, 那是因为很多时候这个任务很难划分成两个分支来并行执行,如果每个指令都要依靠上个指 令的执行结果,那么这样的操作很难在多个处理器上并行执行。但是,我们可以这样想,至 少如果有两个这样任务的话,我们就可以完全利用多个处理器

文档评论(0)

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

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

1亿VIP精品文档

相关文档