来一篇关于NET的DotNet并行盘算的利用误区二
也许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:callvirtinstancevoidSystem.Diagnostics.Stopwatch::Start()IL_0013:nopIL_0014:ldc.i4.0IL_0015:stloc.2IL_0016:br.sIL_0031IL_0018:nopIL_0019:ldloca.siIL_001b:callinstancestringSystem.Int32::ToString()IL_0020:stloc.0IL_0021:ldc.i40xc8IL_0026:callvoidSystem.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:callvirtinstancevoidSystem.Diagnostics.Stopwatch::Stop()
我们注重到,CodePartA的Sleep是间接呈现在Load办法中的。
再来看看Parallel体例:
CodePartB:
Form1_Load:
<olclass="dp-c">IL_0019:callvirtinstancevoidSystem.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:newobjinstancevoidclassSystem.Action`1<int32>::.ctor(object,nativeint)IL_002e:callvaluetypeSystem.Threading.Tasks.ParallelLoopResultSystem.Threading.Tasks.Parallel::For(int32,int32,classSystem.Action`1<int32>)IL_0033:popIL_0034:ldloc.0IL_0035:callvirtinstancevoidSystem.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:callinstancestringSystem.Int32::ToString()IL_0009:stfldstringWindowsFormsApplication4.Form1/c__DisplayClass1::aIL_000e:ldc.i40xc8IL_0013:callvoidSystem.Threading.Thread::Sleep(int32)IL_0018:nopIL_0019:ret}//endofmethodc__DisplayClass1::<Form1_Load>b__0
布局图:
以上的白色代码就是在CodeA中呈现的次要代码。再让我们重温一下这张图,IL的代码义务已很分明的唆使了出来。
<pstyle="text-align:center"> 当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。 最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。 主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。 同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。 由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。 ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp)。 网页从开始简单的hmtl到复杂的服务语言,走过了10多个年头,各种技术层出不穷,单个的主流技术也在不断翻新的版本,现在分析下各种语言的区别、优势、劣势、开发注意事项! ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp)。
页:
[1]