函数式编程与协调数据结构

2009 年 3 月 22 日

协调数据结构(Coordination Data Structures,CDS)是在.NET 4.0 中包含的一套线程安全对象,其中大部分是集合类型。在沉寂了 6 个月之后,这些内容终于有了重大的更新。其中最明显的部分莫过于引入了函数式编程技术,从而减少了设计模式的使用。

一个新类型是 ConcurrentLinkedList,它使用一个 predicate 函数,并配合 TryInsertBetween 方法以线程安全的方式插入节点。这个 predicate 函数会被对象本身多次调用,用于确定合适的插入位置。这样,即使在单线程的情况下,它使用起来也比普通的 LinkedList 要方便一些。

另一使用函数式技巧的地方是 SpinWait 对象。开发人员可以向 SpinWait.SpinUntil 方法传递一个 predicate 函数,而不是一遍又一遍地手动调用 SpinOnce 方法。

下一个则是新类型:ConcurrentBag。这好比是一个对多线程进行附载均衡的队列集合。普通情况下,每个线程只对其自己的队列进行读写。不过在队列为空时,它就会从其它线程的队列中“窃取”一些元素。这意味着在大多数情况下,线程之间不会出现资源竞争,但是每个线程在所有工作完成之前依然会“全力以赴”。ConcurrentBag 并非 ConcurrentQueue 的替代品,后者依然是单生产者 / 单消费者场景下更好的选择。

WriteOnce 类已被移除——这个功能似乎并不怎么有用,它只是在 setter 被访问多次的情况下抛出异常而已。相比之下 Lazy 和 LazyVariable 类型更为有用一些,因此它们被保留了下来。这两者都体现了延迟初始化的特性(因此又被称为 futures)。前者是一个类,而后者则是一个轻量的,但并非“绝对”线程安全的结构。此外,类库中新增了 LazyInitializer,用于处理内存占用(memory footprint)成为问题的情况。还有 ThreadLocal 类,它可以将线程本地资源和 Futures 线程安全地绑定起来。

安全地取消任务而不引发线程取消异常依旧是一个重要的方面。为了改善这个问题,每个可能会带来阻塞的方法都添加了取消的功能。微软目前依然在各处引入任务取消模型,这样可以大大简化类库的开发难度。

更多的信息可参阅微软并行编程博客以及我们之前对CDS 的关注

查看英文原文: Functional Programming and Coordination Data Structures

2009 年 3 月 22 日 12:141285
用户头像

发布了 157 篇内容, 共 43.3 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

简单的了解一下K8S,并搭建自己的集群

detectiveHLH

Kubernetes 微服务

GitHub Actions和mp-ci助力微信小程序持续集成

neo

微信小程序 taro GitHub CI/CD

我从LongAdder中窥探到了高并发的秘籍,上面只写了两个字...

why技术

jdk 高并发 LongAdder

API接口管理平台YAPI的搭建

Man

DevOps APi设计 YAPI

猿灯塔:spring Boot Starter开发及源码刨析(七)

猿灯塔

变性手术后,产品总监和当当网打起了官司

赵新龙

法律 判决书 案例

linux上强大的字符串匹配工具详解-grep

X先生

Shell grep

第六期总结

AIK

数据分析师完整的指标体系构建 (干货)

博文视点Broadview

数据挖掘 读书笔记 数据分析 数据 求职

计算机网络基础(四)---网络层-ARP协议与RARP协议

书旅

laravel 计算机网络 网络协议 计算机基础 网络层

探索无限潜能,英特尔神经拟态计算除了有“嗅觉”还能有“触觉”

飞天鱼2017

技术科普丨服务发现和负载均衡的来龙去脉

华为云开发者社区

负载均衡 微服务 开发者工具 服务端 服务

解决方案|智能消防预警系统突破高层楼房限制

华为云开发者社区

AI 物联网 边缘计算 华为云

有了“质量墙”,程序员再也没有秃头的烦恼

华为云开发者社区

程序员 软件 代码审查 项目 代码

有趣的条漫版 HashMap,25岁大爷都能看懂

古时的风筝

hashmap

中台,很多人理解的都不对

DeeperMan

数据中台 中台战略

数十家技术社区联名推荐的GeekOnline来了!

Geek_116789

优傲机器人以人机协作助力中国“智能制造”落地

Geek_116789

《北京市政务服务领域区块链应用创新蓝皮书(第一版)》正式发布

CECBC区块链专委会

一文快速掌握华为云IPv6基础知识及使用指南

华为云开发者社区

物联网中台 物联网 网络 华为云

知乎,挣钱?果然有长尾效应

非著名程序员

程序员 副业 副业赚钱 知乎 好物推荐

如何帮助技术员工高效成长?这几家企业的做法值得借鉴

极客时间企业版

研发管理 研发团队培训

如何做一次完美的 ABTest?

vivo互联网技术

数据分析 AB testing实战

小白如何学习操作系统?

cxuan

操作系统

腾讯面了五轮,面委挂了,挂的原因让大家唏嘘...

程序员生活志

腾讯 面试

Java HashMap 的那么多为什么

多选参数

Java Java源码

架构师训练营week06 作业

GunShotPanda

架构师训练营week06 学习总结

GunShotPanda

重读vue2.0风格指南,我整理了这些关键规则

前端有的玩

Java Vue 代码规范

Idea中关于Js中的一些警告

阡陌r

信创舆情一线--十五部门印发指导意见进一步促进服务型制造发展

统小信uos

函数式编程与协调数据结构-InfoQ