仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 791|回复: 8
打印 上一主题 下一主题

[学习教程] 来一篇关于NET的DotNet并行盘算的利用误区二

[复制链接]
逍遥一派 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:27:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
也许C#刚上市的时候有些抄袭Java吧,但自从C#2.0上市之后,整个局面就扭转乾坤了,不但Java在模仿C#,而且他从来都没能跟得上C#的脚步。<p>并行盘算或称平行盘算是相对串行盘算来讲的。所谓并行盘算可分为工夫上的并行和空间上的并行。工夫上的并行就是指流水线手艺,而空间上的并行则是指用多个处置器并发的实行盘算。
上接DotNet并行盘算的利用误区一
误区三.并行盘算是运转时的事
切实其实,DotNet会在运转时决意是不是利用并行库处置代码,可是早在你编译代码时,编译器就早已为这一时候做好筹办,换就话说:
1.利用并行库处置代码与一般体例对照,IL的布局是分歧的。
2.即便你选择利用并行盘算,而且你也的确具有多核(线程)CPU,运转时你的代码也纷歧定是并行的。
利用TPL后CLR大概会分化义务,这一根据的个中之一是由IL撑持的,IL将并行的义务代码分别,以便在未来的操纵中并行,这一点能够从以下的示例中看出来,以下两段示例的中心C#代码都是Tostring()和Sleep(),CodeA利用For包括Sleep,CodeB利用Parallel.For处置:
CodePartA:
IL:
<olclass="dp-c">IL_000e:callvirtinstancevoid[System]System.Diagnostics.Stopwatch::Start()IL_0013:nopIL_0014:ldc.i4.0IL_0015:stloc.2IL_0016:br.sIL_0031IL_0018:nopIL_0019:ldloca.siIL_001b:callinstancestring[mscorlib]System.Int32::ToString()IL_0020:stloc.0IL_0021:ldc.i40xc8IL_0026:callvoid[mscorlib]System.Threading.Thread::Sleep(int32)IL_002b:nopIL_002c:nopIL_002d:ldloc.2IL_002e:ldc.i4.1IL_002f:addIL_0030:stloc.2IL_0031:ldloc.2IL_0032:ldc.i4.s10IL_0034:cltIL_0036:stloc.3IL_0037:ldloc.3IL_0038:brtrue.sIL_0018IL_003a:ldloc.1IL_003b:callvirtinstancevoid[System]System.Diagnostics.Stopwatch::Stop()
我们注重到,CodePartA的Sleep是间接呈现在Load办法中的。




再来看看Parallel体例:
CodePartB:
Form1_Load:

<olclass="dp-c">IL_0019:callvirtinstancevoid[System]System.Diagnostics.Stopwatch::Start()IL_001e:nopIL_001f:ldc.i4.0IL_0020:ldc.i4.s10IL_0022:ldloc.1IL_0023:ldftninstancevoidWindowsFormsApplication4.Form1/c__DisplayClass1::<Form1_Load>b__0(int32)IL_0029:newobjinstancevoidclass[mscorlib]System.Action`1<int32>::.ctor(object,nativeint)IL_002e:callvaluetype[mscorlib]System.Threading.Tasks.ParallelLoopResult[mscorlib]System.Threading.Tasks.Parallel::For(int32,int32,class[mscorlib]System.Action`1<int32>)IL_0033:popIL_0034:ldloc.0IL_0035:callvirtinstancevoid[System]System.Diagnostics.Stopwatch::Stop()//注重,Sleep已不在Load办法中了,而是被一个“b__0”取代,并行代码与宿主代码分别,以下就是b__0的IL:.methodpublichidebysiginstancevoid<Form1_Load>b__0(int32i)cilmanaged{//代码巨细26(0x1a).maxstack8IL_0000:nopIL_0001:ldarg.0IL_0002:ldarga.siIL_0004:callinstancestring[mscorlib]System.Int32::ToString()IL_0009:stfldstringWindowsFormsApplication4.Form1/c__DisplayClass1::aIL_000e:ldc.i40xc8IL_0013:callvoid[mscorlib]System.Threading.Thread::Sleep(int32)IL_0018:nopIL_0019:ret}//endofmethodc__DisplayClass1::<Form1_Load>b__0

布局图:




以上的白色代码就是在CodeA中呈现的次要代码。再让我们重温一下这张图,IL的代码义务已很分明的唆使了出来。
<pstyle="text-align:center">
逍遥一派 该用户已被删除
沙发
 楼主| 发表于 2015-1-18 14:42:29 | 只看该作者
当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。
变相怪杰 该用户已被删除
板凳
发表于 2015-1-23 19:27:35 | 只看该作者
最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。
兰色精灵 该用户已被删除
地板
发表于 2015-1-31 19:33:27 | 只看该作者
主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。
冷月葬花魂 该用户已被删除
5#
发表于 2015-2-6 23:53:59 | 只看该作者
同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。
小魔女 该用户已被删除
6#
发表于 2015-2-19 04:29:35 | 只看该作者
由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。
再见西城 该用户已被删除
7#
发表于 2015-3-6 13:03:07 | 只看该作者
ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp)。
小妖女 该用户已被删除
8#
发表于 2015-3-13 02:07:12 | 只看该作者
网页从开始简单的hmtl到复杂的服务语言,走过了10多个年头,各种技术层出不穷,单个的主流技术也在不断翻新的版本,现在分析下各种语言的区别、优势、劣势、开发注意事项!
乐观 该用户已被删除
9#
发表于 2015-3-20 09:58:44 | 只看该作者
ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 04:27

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表