ASP.NET编程:.NET的列举并发汇合切磋仓酷云
其实net网页编程之所以在曾经独步天下,就是因为他的跨平台、安全性,这两方面,效率可不是net网页编程的强项,反而是他最短的一块挡板,虽然net总是用理论证明比.NET快。.NET的并行扩大(ParallelExtensions)包含两个并发汇合:仓库和行列。其他汇合类仍是依照它们固有的体例事情,可是关于语义的处置仍然有一些挥之不往的成绩。特别是当汇合在一个线程被编纂,而在别的一个线程被列举的时分,会产生甚么呢?关于单线程的类,谜底是众所周之的,列举器将抛出一个非常。不外关于并发类来讲,在这类情形下应当设定一种划定规矩,供应几种选择。
一种选择是,在列举入手下手的时分为现存数据创立一个快照。这类体例在轮回的过程当中会占用更多的内存,不外快照一旦被创立,就能够被自在地锁定。这类体例下隐含的功能成绩很难被预估。
不利用快照,汇合另有一组包管措施供应给开辟职员。它们中良多都是自相冲突的,不外在某些前提下它们也都是合适的。
[*]删除的条目老是可读
[*]删除的条目不成再读
[*]假如增加在汇合的开端,那末增加的条目老是可读
[*]假如增加在汇合的任何中央,那末增加的条目老是可读
[*]增加的条目老是不成读取
[*]被挪动的条目,不克不及被读取两次
[*]被挪动的条目,假如是挪动到汇合的开端,那末就可以被读取两次
[*]被挪动的条目,就算是被挪动到汇合的开首,也老是能够读取
[*]不凌驾N条的条目就可以被读取,而N是汇合的初始巨细。
在给出一个选择局限后,StephenToub向人人咨询关于并行扩大的反应定见:
[*]鉴于在.NET中已存在一些尺度的汇合类了,假设你已具有它们的线程平安(thread-safe)版本,那末甚么样的情况下,你才能够从能并发地列举统一个被别的线程同时编纂的汇合中取得优点?我们固然对此已有所懂得,不外仍是很想多听听人人的定见。
[*]假定你的确具有第一条提到的情况,那末为了让从列举器中前往的数据是可用的,你也许必要的最小包管措施是甚么?比方,关于一个字典对象假如不存在并发编纂(增加/更新/删除),你能够以为它是线程平安的,你将能在列举过程当中正确地失掉字典中的内容;但是,假如存在并发会见,你不再能失掉已不存在于字典中的内容,你大概看不到并发增加或更新的工具,也大概仍然能看到那些被并发地删除的条目。
[*]假如我们的确撑持在线程平安的汇合长进行面向并发编纂的列举操纵,那末你但愿可以从“在并发编纂上抛出非常”如许的举动中恢复之前的操纵吗?
[*]最初,你希冀看到的既线程平安又能完成可伸缩正本的汇合中,哪一个最主要?
OmervanKloeten关于序列化,提出了一个主要的成绩,
一个主要的附加功效是可以异步地转储(dump),即偶然为了备份能够把内存的数据缓存到耐久性存储,这就请求线程平安的列举历程。(实践上,想想——是不是也能线程平安地序列化?如许的话甚么才是默许的举动呢?)RickBrewster则倡议我们乞助于函数式编程观点。取代在内部锁定汇合的体例,一切对汇合的并发操纵都能经由过程给“Lock(Action)”办法传送一个托付来实行。
这个点子就是让“Lock”办法主动地用lock/unlock如许的布局把你的回调包抄起来。这类办法也不会限定你利用这些类以后已表露出来的原子操纵。实践上,大概让Lock来取得Func而非Action更好,而且ConcurrentList类自己不真正具有任何用于get、set、enumerate的办法。利用这类体例,你就只能会见在锁定局限内的类。检察英文原文:EnumeratingConcurrentCollections
来自:http://www.infoq.com/cn/news/2008/09/Parallel-Enumerators在CSDN里搜索一下“初学”两字,竟有三百余篇帖子(也许更多)。有些帖子说,有了asp的基础,只要15天就能很熟悉了,我甚感自己的愚钝。更多帖子是向大家请教初学者适合看书。两个多月的时间(当然平常杂事比较多。 在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗? 碰到复杂点的问题都不知道能不能解决,现在有点实力的公司都选择自已在开源的基础上做开发。但没听说过有人在IIS上做改进的,windows、sqlserver集群方面的应用也很少见。 我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。 关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。 业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。 ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp)。 asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源 市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。 代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
页:
[1]