OceaBase开发者大会落地上海!4月20日共同探索数据库前沿趋势!报名戳 了解详情
写点什么

关于.NET 中 Barrier 类的解释

  • 2011-06-20
  • 本文字数:875 字

    阅读完需:约 3 分钟

随着对多核系统重视的增加,(编程人员)对并行和并发编程的理解显得比从前更加重要。幸运的是,.NET 4 在向开发人员提供的同步原语方面做了很多改进。这些同步原语其中之一就是 Barrier 类(MSDN 中对 Barrier 类的注释:使多个任务能够采用并行方式依据某种算法在多个阶段中协调工作),Emad Omara 正是使用了 Barrier 类实现了并行合并排序。

Emad Omara 的并行合并排序算法假设了在排序操作的过程中(操作者)对计算机的所有 CPU 具有完全的访问权限。虽然这不是必要条件,但只是为了演示。输入数组首先被大致均等地划分为 N 个分区,这里 N 是逻辑 CPU 的数目。每个 CPU 上都会启动一个线程并针对该 CPU 所分配到的(输入数组的)分区进行单线程的排序。

这时所有的线程在继续下一阶段的操作之前都必须同步。半数的线程将会退出同时另一半的线程将会在相邻的分区之间进行合并排序。在之前版本的.NET 框架中,这些操作将会由低层次的 (.NET) 原语或者(编程人员)对 Thread.Join 方法小心谨慎的调用来完成。(而在.NET 4 中) Barrier 类给我们提供了(实现这些操作的)另一种选择。

新的 Barrier 类在某些方面就像 Thread.Join 方法一样,它会等待所有的线程完成(当前阶段)。但它又不像 Thread.Join 方法那样,所有被等待的线程(在完成当前阶段后)需要退出。(在 Barrier 类中)取而代之的,它们仅需要发出已经完成当前阶段的信号并时刻准备着开始下一个阶段。这样就省去了(在不同阶段间)结束和重新创建线程,这些改进对于线程池的操作来说尤其重要。

默认情况下 Barrier 类假设任何一个线程在进行下一阶段的工作前都必须给出前一个阶段的完成信号。很明显这个假设在这里 (Emad Omara 的并行合并排序算法) 不成立,因为每次在进入了合并排序阶段后(计算机)只需要半数(相对于最初建立的线程数)的线程(来完成后续的操作)。因此 Emad 在此调用了 Barrier.RemoveParticipant 方法来把预期将要发出完成信号的线程数量减一。

再次强调这个算法是为了教学目的而设计的,如果要将其运用于产品的构建上那么它还需要进行更多的改进。

查看英文原文 Explaining .NET’s Barrier Class

2011-06-20 02:101543

评论

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

币安智能链智能合约DAPP开发

Geek_23f0c3

智能合约 DAPP智能合约交易系统开发 DAPP系统开发 币安智能链

终于读完谷歌高级架构师分享的Kubernetes源码剖析文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

神策分析 Android SDK 网络模块解析

神策技术社区

程序员 代码 信息 神策数据

百度推出 “汽车机器人”,AI体验官金晨直呼“太豪横了”

百度开发者中心

产品 最佳实践 企业动态 Apollo 无人车

安装ApiPost-接口工具 发送HTTP请求

CodeNongXiaoW

大前端 测试 后端 接口测试 接口管理工具

JVM调优(一)

彭阿三

阿里大牛耗时三年整理出来的4588页Java面试诛仙手册,已全面开源

Java~~~

Java 架构 面试 JVM 架构师

Redis主从握手流程,你真的了解了吗?

博文视点Broadview

神策分析 iOS SDK 代码埋点解析

神策技术社区

程序员 数据采集 埋点

Docker

彭阿三

Github高分爆赞,一天遭狂转 10w+ 次!20万字的Java面试手册来了

Java~~~

Java 架构 面试 JVM 架构师

上线半天下载量破100W!美团内部微服务进阶笔记,超详细

Java 架构 面试 微服务 美团

阿里P8耗时一个月肝出这份26W字Java面试手册,在Github标星30K+

Java~~~

Java spring 架构 面试 JVM

ShardingSphere 知识库更新 | 官方样例集助你快速上手

SphereEx

数据库 开源

神策 Android 全埋点插件介绍

神策技术社区

程序员 数据采集 埋点 行为数据

结合scipy.linalg在Python中使用线性系统

华为云开发者联盟

Python 矩阵 Numpy 线性系统 向量

全链路压测实践

超凡生

币安智能链智能合约DAPP开发|智能合约DAPP源码搭建

量化系统19942438797

dapp 币安智能链

人类高质量 Java 学习路线【一条龙版】

程序员鱼皮

Java 数据库 后端 求职 编程学习

云小课|MRS基础原理之ClickHouse组件介绍

华为云开发者联盟

mapreduce 开源 Clickhouse EI企业智能 列式数据库

【ShardingSphere技术专题】「ShardingJDBC」SpringBoot之整合ShardingJDBC实现分库分表(JavaConfig方式)

洛神灬殇

ShardingJDBC ShardingSphere ShardingSphere-Proxy 8月日更

imtoken钱包搭建,区块链去中心化钱包搭建

ToB迎来上市潮,谁是下一个IPO黑马?

ToB行业头条

IPO

引领异构时代,英特尔发布重大架构创新

科技新消息

MySQL 系列教程之(九)MySQL 必修:事务

若尘

MySQL 数据库 8月日更

gopher成长之路(三):出差小记

非晓为骁

个人成长 蜕变

多种云资源管理用什么软件好?你知道吗?

行云管家

云计算 云服务 云资源

谷歌高级架构师十年心血终成Kubernetes微服务实战文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

全靠这份阿里大佬的“Java进阶面试手册”收获蚂蚁offer

Java~~~

Java 架构 面试 算法 JVM

AI 场景的存储优化之路(二)

焱融科技

人工智能 云计算 AI 高性能 分布式存储

学完阿里P8推荐的实时流计算系统设计与实现PDF,终入淘宝

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

关于.NET中Barrier类的解释_.NET_Jonathan Allen_InfoQ精选文章