ASP.NET编程:构建更好的线程平安汇合仓酷云
有个问题想请教你一下,呵呵:)你觉得将来学什么方向比较好,我真是想不出来,知道的太少了,麻烦了。年夜部分线程平安的汇合都有一些基本性的缺点:固然每一个操纵都是线程平安的,可是多个操纵没法组合起来利用。这意味着一些基础的实行按次,比方在弹召盘部元素之前反省栈内元素数目会呈现潜伏的伤害。只管已有一些API想法将某些操纵绑定起来(比方.NET4的CoordinationDataStructures),可是它们常常会引进丑恶的办法(如TryDequeue)。.NET1里的汇合实验了另外一种体例,它们会对外表露一个SyncRoot属性,而不是在外部举行锁定。固然SyncRoot仍旧是同步对象的默许机制,可是.NET2已丢弃了SyncRoot/Wrapper计划形式。
那末该怎样创立一个可用的组合式API呢?JaredParson以为汇合不该该间接表露出线程平安的API,一切的办法都应当属于一个一时的对象,而这个对象只要在您锁定汇合的时分才被创立出来。这个一时对象是汇合的“钥匙”,只要钥匙的持有者才干猎取汇合内容。
以下示例为JaredParsons的线程平安行列:
staticvoidExample1(ThreadSafeQueuequeue){using(varlocked=queue.Lock()){if(locked.Count>0){varfirst=locked.Dequeue();}}}名为locked的对象自己不是线程平安的,可是开辟职员只要在using代码块中才干准确实行操纵。在恪守了这一复杂划定规矩以后,开辟块里的一切代码就是线程平安的。Jared注释道:
与年夜部分线程平安的计划一样,这些代码仍是有被误用的大概:
[*]在ILockedQueue烧毁以后却持续利用它。这类做法应当被克制,用户现有的常识一样平常足以免这个成绩。别的一些静态反省工具,比方FxCop,会把这类做法辨认为一个毛病。我们也能够利用一种更严峻的做法来制止此类情形呈现:增加一个disposed标志,并在每一个办法中举行反省。
[*]假如用户在超过多个Lock语句的情形下保存某个值(比方Count),那末大概会对汇合的情况呈现毛病的判别和假定。
[*]假如用户没有准确烧毁ILockedQueue,那末这个对象会被永世锁定。侥幸的是,关于完成了IDisposable的对象,FxCop一样会将这类做法辨认为一个毛病——只管这不是一个万分稳妥的机制。
[*]没法断定用户是不是会临时持有ILockedQueue对象。固然IDisposable一样平常包括着“短时间”的意味,可是这其实不能做出完善的包管。
[*]ILockedQueue并非线程平安的。固然一样平常情形下用户不会把IDisposable对象交给多个线程利用,但这也是必需思索到的情形之一。
检察英文原文:BuildingaBetterThread-safeCollection
本文出自:http://www.infoq.com/cn/news/2009/02/Threaded-Collections
如果英语好,口才好,加上女孩子的优势说不定有机会进去做做别的工具) 现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。 CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。 能产生和执行动态、交互式、高效率的站占服务器的应用程序。运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写。 虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。 可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。 目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案. 能产生和执行动态、交互式、高效率的站占服务器的应用程序。运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写。 ASP在执行的时候,是由IIS调用程序引擎,解释执行嵌在HTML中的ASP代码,最终将结果和原来的HTML一同送往客户端。 如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。 市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。 弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。
页:
[1]