写点什么

关于.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:101632

评论

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

Hadoop全分布式部署

芝士味的椒盐

Java 大数据 hadoop 5月月更

4000字,详解Python操作MySQL数据库

爱好编程进阶

程序员 后端开发

SpringSecurity默认页面生成

急需上岸的小谢

5月月更

IntelliJ IDEA开发最佳配置

爱好编程进阶

Java 程序员 后端开发

网站开发进阶(二)阿里云将80端口请求转发到其他端口

No Silver Bullet

5月月更 端口转发 端口映射

模块四作业(试卷存储设计)

天琪实刚亮

使用PIL.Image库极简生成含冬奥会元素头像

芝士味的椒盐

Python 冬奥会 5月月更

PingCode 产品怎么样?产品底层逻辑是什么样的?

爱吃小舅的鱼

Docker入门

爱好编程进阶

Java 程序员 后端开发

dubbo + zookeeper + spring 分布式系统

爱好编程进阶

Java 程序员 后端开发

Java-进阶:多线程2

爱好编程进阶

Java 程序员 后端开发

7-52 两个有序链表序列的交集 (20 分)(思路加详解尾插法)come Boby!

爱好编程进阶

程序员 后端开发

Cookie & Session

爱好编程进阶

Java 程序员 后端开发

一、何为应用系统高可用

穿过生命散发芬芳

5月月更

软件架构的23个基本原则

俞凡

架构

Dagger2源码分析(三)从源码角度分析注解在Dagger2中的使用

爱好编程进阶

Java 程序员 后端开发

模块三作业

天琪实刚亮

面向快速反应的工程团队--QRF团队模型

俞凡

管理 研发效能

Java 总结:各种排序算法的介绍及其之间的对比差异

爱好编程进阶

Java 程序员 后端开发

关于“运放“这些知识点

謓泽

5月月更

ArrayList、HashMap等集合初始容量的大小以及扩容的倍数

爱好编程进阶

Java 程序员 后端开发

client-go实战之一:准备工作

爱好编程进阶

Java 程序员 后端开发

2022必会的前端手写面试题

buchila11

前端面试

maven构建docker镜像三部曲之一:准备环境

程序员欣宸

Java Docker 5月月更

address list(dynamic)- 通讯录动态版本

爱好编程进阶

Java 程序员 后端开发

Day435&436

爱好编程进阶

Java 程序员 后端开发

前端食堂技术周刊第 35 期:Vitest v0.10.0、Jest 28、Ant Design v4.20.0、Lerna 官宣停止维护、UnoCSS 交互式

童欧巴

JavaScript web前端 前端工程师

7点建议助您写出优雅的Java代码

爱好编程进阶

Java 程序员 后端开发

Day386&387

爱好编程进阶

Java 程序员 后端开发

Java 之 SpringMVC(一篇文章精通系列)

爱好编程进阶

Java 程序员 后端开发

这是一篇关于哈希表的爽文

武师叔

5月月更

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