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

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

ID:27747826

大小:3.32 MB

页数:82页

时间:2018-12-05

浅谈.net下的多线程和并行计算(全集)_第1页
浅谈.net下的多线程和并行计算(全集)_第2页
浅谈.net下的多线程和并行计算(全集)_第3页
浅谈.net下的多线程和并行计算(全集)_第4页
浅谈.net下的多线程和并行计算(全集)_第5页
资源描述:

《浅谈.net下的多线程和并行计算(全集)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、作者信息1IT工程技术网,www.systhinker.com浅谈.NET下的多线程和并行计算声明:以下文字由关注IT人所关注的,IT工程技术网(www.systhinker.com)根据网络文章整理提供,只为传递知识之目的,如有权利人对此持有异议,请提供权利证明告知我们。作者信息作者:lovecindywanglovecindywang的个人主页1.前言作为一个ASP.NET开发人员,在之前的开发经历中接触多线程编程的机会并不是很多,但是随着.NET4.0的发布临近,我越来越感受到未来的1-2年中并行计算将会有很大的应用。于是决定通过写日志的方式来总结一下.N

2、ET3.5下的多线程编程进而引入.NET4.0提供的新的并行库以及新的并行编程模式和编程的思维方式。个人觉得在日常的编程中对于ASP.NET程序员来说使用多线程编程不是很多,其实我们无时无刻不在享受多线程的优势。首先,WEB服务器环境就是一个多线程环境,每一个请求都是独立的线程,如果没有多线程很难想象只能同步处理一个请求的WEB服务器有什么用,类似,我们的数据库也应该是一个多线程环境。对于Windows应用程序的程序员来说恐怕就很难不接触多线程了,最简单的就是我们会新开线程去做一些耗时的操作,这样就可以避免UI停止响应,在操作结束后再把操作结果应用在主线程的控件

3、上。虽然说这样的应用是多线程,甚至很多程序员习惯什么操作都新开一个线程去做,但是我觉得这样的多线程应用的思维还停留在单核时代,在多核时代,我们确实可以让任务实际的并行执行而不是看上去并行执行。首先来说说概念,进程和线程的基本的概念不用多说,自然我们也能理解一个进程至少包含一个线程。通过在一个进程中开启多个线程,我们就可以让一个程序在同一时间看上去能做多个事情,比如可以在接受用户响应的时候进行一些计算。在以前处理器往往只有一个核心,也就是说在同一时间,处理器只能做一件事情。那么怎么实现之前说的多个线程同时执行呢。其实这个同时只是表面上看上去同时,本质上多个线程依次

4、占用处理器的若干时间片,大家前言2IT工程技术网,www.systhinker.com轮流使用其资源,由于这个时间片非常短,所以在一个长的时间看来似乎是几个线程同时得到了执行。举一个生动的例子,我们经常看到有一些画家能同时在一个画布上画两个不同的图片,一个画人一个画房子,最后一起完成这个画。但仔细看的话发现,他是两手拿了两只画笔,在这里画一笔那里画一笔,在同一时间其实也只有一只笔在画。这个画家应该也像普通人一样是单核的,只是线程切换比较快罢了。我经常在打电话的时候和网友进行聊天,在同一时间做两件事情,但是这样很费脑子,在打字前我要回忆一下刚才聊天的内容,然后输入

5、聊天的文字,然后再去回想一下刚才那哥们说了啥,在电话里面回他一句,这种回忆的工作就是准备线程的上下文,交给脑子去处理。虽然同一时间是做了两件事情,但是这个上下文的准备工作也浪费了点时间,如果我在打电话网络聊天的同事在去做第三件事情比如看电影,那我估计就不行了。所以,线程也不能开的很多,特别对于人脑来说。但是对于电脑处理器来说就不一样了,你只要准备好数据和指令他执行就是了,至于这些事情来自几件事情它不关心,24小时一秒都不浪费在执行指令完全没问题,当然你也可以让它闲着。您可能会想了,既然线程切换需要时间,那么我们开两个线程执行两个任务不是还没有一个一个执行来的快吗

6、?其实即使对于单核的处理器都不一定,因为在实际的应用中我们的任务往往不可能从头计算到尾一直占用处理器资源,在很多时候我们要等待IO响应或用户的响应,如果只是一个线程做事情的话处理器太闲了。对于现在多核的处理器来说,在同一时刻理论上可以在每一个处理器上都并行执行指令,我们就更需要利用多线程来提高运算速度了。当然也不是说一个任务要执行10秒,我们在双核的机器上并行执行这个任务只需要5秒了,那是因为很多时候这个任务很难划分成两个分支来并行执行,如果每个指令都要依靠上个指令的执行结果,那么这样的操作很难在多个处理器上并行执行。但是,我们可以这样想,至少如果有两个这样任务

7、的话,我们就可以完全利用多个处理器的优势来并行执行了。但是也不是多可以随便的开线程,每一个线程默认情况下都会占用1M的栈空间(对于普通应用程序来说),在32位Windows平台下可以给一个用户进程使用的程序最大在2G,那么也就是说在程序中使用的线程不能超过2000个,在实际测试中可以发现一般来说开1930左右个线程就会收到内存不足的异常,其实这个数量是绝对够用的,即使复杂的Outlook2007程序一般也只用了50个不到的线程(可以在任务管理器中观察到)。在不得已的情况下很多人都不太会去使用多线程也是有原因的,一是因为多线程编程复杂,我们也习惯了一行一行代码执行

8、的编程模式,对于一个好的

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

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

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