|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我之所以想学。NET,是因为一直觉的BILLGATES好厉害,希望有一天能去微软,虽然现在还距离遥远,呵呵:)和谐数据布局(CoordinationDataStructures,CDS)是在.NET4.0中包括的一套线程平安对象,个中年夜部分是汇合范例。在寂静了6个月以后,这些内容终究有了严重的更新。个中最分明的部分莫过于引进了函数式编程手艺,从而削减了计划形式的利用。
一个新范例是ConcurrentLinkedList,它利用一个predicate函数,并共同TryInsertBetween办法以线程平安的体例拔出节点。这个predicate函数会被对象自己屡次挪用,用于断定符合的拔出地位。如许,即便在单线程的情形下,它利用起来也比一般的LinkedList要便利一些。
另外一利用函数式技能的中央是SpinWait对象。开辟职员能够向SpinWait.SpinUntil办法传送一个predicate函数,而不是一遍又一各处手动挪用SpinOnce办法。
下一个则是新范例:ConcurrentBag。这比如是一个对多线程举行附载平衡的行列汇合。一般情形下,每一个线程只对其本人的行列举行读写。不外在行列为空时,它就会从别的线程的行列中“夺取”一些元素。这意味着在年夜多半情形下,线程之间不会呈现资本合作,可是每一个线程在一切事情完成之前仍然会“尽心尽力”。ConcurrentBag并不是ConcurrentQueue的替换品,后者仍然是单临盆者/单消耗者场景下更好的选择。
WriteOnce类已被移除——这个功效仿佛其实不怎样有效,它只是在setter被会见屡次的情形下抛出非常罢了。比拟之下Lazy和LazyVariable范例更加有效一些,因而它们被保存了上去。这二者都表现了提早初始化的特征(因而又被称为futures)。前者是一个类,尔后者则是一个轻量的,但并不是“相对”线程平安的布局。别的,类库中新增了LazyInitializer,用于处置内存占用(memoryfootprint)成为成绩的情形。另有ThreadLocal类,它能够将线程当地资本和Futures线程平安地绑定起来。
平安地作废义务而不激发线程作废非常仍旧是一个主要的方面。为了改良这个成绩,每一个大概会带来堵塞的办法都增加了作废的功效。微软今朝仍然在遍地引进义务作废模子,如许能够年夜年夜简化类库的开辟难度。
更多的信息可参阅微软并行编程博客和我们之前对CDS的存眷。
检察英文原文:FunctionalProgrammingandCoordinationDataStructures
来自:http://www.infoq.com/cn/news/2009/03/CDS-March
有理由相信是能提供更出色的性能。很多平台无法支持复杂的编译器,因此需要二次编译来减少本地编译器的复杂度。当然可能做不到net网页编程编译器那么简易。 |
|