山那边是海 发表于 2015-1-18 11:25:00

ASP.NET教程之C# 4.0“修复了”逝世锁成绩仓酷云

以前很热炒跨平台,主要是由于硅谷挑战微软霸主地位的热情,但是冷静下来后,跨平台往往不是那么一回事。假设你有个软件,所谓的跨平台,你只需要为第二个平台上重新编译一次就行了,这样很难么?几年前,EricLippert注重到依据一样源代码举行优化构建和非优化构建会招致分歧的潜伏逝世锁。这个成绩会在C#4.0中被“修复”。“修复”放在引号傍边,是由于办理体例也有它本人的成绩。
最后的成绩大概来自于编译器在把IL转化为呆板代码的时分,依据你是不是翻开或封闭优化器和调试器,以非分歧的举动拔出了no-op指令。Lippert提道:
回忆一下,lock(obj){body}实践上就是上面代码的语法:vartemp=obj;
Monitor.Enter(temp);
try{body}
finally{Monitor.Exit(temp);}
这里的成绩是,假如编译器在Monitor.Enter和受try回护的地区之间天生了no-op指令,那末运转时就有大概在Monitor.Enter以后和try之前抛出线程停止非常。在如许的情况下,finally不会实行,那末也就发生了程序锁泄露,程序有大概呈现逝世锁。假如在非优化和优化构建中不存在差别,就不存在这个成绩。
不外。这个办理计划[译注:C#4.0是将Monitor.Enter()移进到try子句中,并在Enter的时分会传送一个援用值,标识锁是不是被占用。在finnally子句中,会起首判别锁是不是被占用,假如被占用,则开释锁。]也有它本人的成绩。据Eric说,“坚持分歧与纷歧致比拟,完整就是龟笑鳖无尾。它仍旧存在很年夜的问题...如许天生的代码所[译注:天生的代码是指编译器将lock转换为IL,实践上就相称于利用Monitor的语法]隐含的意义就是以为逝世锁程序是大概产生的最糟的事变。这类说法一定正确。”
锁的目标是为了回护可变资本,大概换句话说,是为了不可变资本的多个潜伏用户会见资本已被损坏的版本。4.0版本的现有办理计划并没有包括回滚到原始形态的功效,也没有包管可变资本的完全性。强行进进lock语句的finally子句、开释锁和同意会见恣意守候线程(该线程占用了已被损坏的资本),都有大概激发非常。这一办理计划在了局的分歧性、下降逝世锁的大概性和对会见被损坏形态大概支付的价值方面,做出了折衷。该成绩特别在多线程编程中会存在风险。
这个特定的折中是对两种糟了局的选择:程序逝世锁,仍是不再回护主要资本的形态。所谓“两害相权取其轻”,当我们举行多线程编程时,就必需在多个计划决议与衡量中做出一个选择。
这篇文章反应强烈热闹,一些开辟职员以为这类计划成绩不但限于多线程,在“平安锁”和“平安非常”之间也存在分歧的地方。Lippert也批准多线程只会让难处置的成绩更难,“正确取得锁仅仅是万里长征的第一步”,你的计划还必要思索其他各类非常,和在非常产生后怎样处置它们。大批的复兴者指出停止线程的伤害性,并部分批准Lippert所说的“停止非常地道就是找逝世”。
检察英文原文:C#4.0"Fixes"DeadlockIssue
来自:http://www.infoq.com/cn/news/2009/03/CSharpDeadlockFixed另外,小型软件代码重用价值低,没有必要跨平台;大型软件,有严格的规划、部署,不可以随意跨平台。

admin 发表于 2015-1-21 05:40:27

Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。

分手快乐 发表于 2015-1-25 16:22:50

Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。

谁可相欹 发表于 2015-1-26 13:42:58

但是目前在CGI中使用的最为广泛的是Perl语言。所以,狭义上所指的CGI程序一般都是指Perl程序,一般CGI程序的后缀都是.pl或者.cgi。

柔情似水 发表于 2015-1-30 10:36:45

HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了.

飘灵儿 发表于 2015-2-4 20:30:47

主流网站开发语言之PHP:PHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。

精灵巫婆 发表于 2015-2-10 06:31:29

当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。

兰色精灵 发表于 2015-2-28 23:30:11

由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。

飘飘悠悠 发表于 2015-3-1 01:24:02

但是目前在CGI中使用的最为广泛的是Perl语言。所以,狭义上所指的CGI程序一般都是指Perl程序,一般CGI程序的后缀都是.pl或者.cgi。

乐观 发表于 2015-3-10 11:13:31

asp.net空间的支持有:ASP.NET1.1/虚拟目录/MicrosoftFrontPage2000扩展/CDONTS,同时他的网站上也提供了Asp.net的使用详解和程序源代码,相信对使用ASP.NET编程的程序员来说会非常有用哦!

小女巫 发表于 2015-3-10 21:46:35

Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!

只想知道 发表于 2015-3-11 03:10:25

市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。

小魔女 发表于 2015-3-12 02:51:32

逐步缩小出错代码段的范围,最终确定错误代码的位置。

海妖 发表于 2015-3-19 17:39:44

对于中小项目来说.net技术是完全可以胜任,但为什么现在大型公司或网站都选择php或java呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。

仓酷云 发表于 2015-3-30 13:44:35

比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。
页: [1]
查看完整版本: ASP.NET教程之C# 4.0“修复了”逝世锁成绩仓酷云