写点什么

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

评论

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

Apache APISIX 为 KubeSphere 提供更好用的网关及 K8S Ingress Controller

API7.ai 技术团队

Apache 开源 API网关 APISIX KubeSphere

雪花算法,什么情况下发生 ID 冲突?

Java 架构 分布式 算法

面试官手里那些秀你一脸的求质数大法,疯狂复习半个月

Java 程序员 后端

学生管理系统整理架构设计

小智

架构训练营

JavaScript 进阶(二)下

Augus

JavaScript 9月日更

不会 Lua?Python 助你快速上手 Apache APISIX 插件开发

API7.ai 技术团队

Python Apache 开源 API网关 APISIX

面试竟然被这31道Java基础题难倒了,被阿里面试官征服了

Java 程序员 后端

2021年第十四届南京智慧城市展览会

南京专业智博会

智博会 智慧城市展览会 智慧城市论坛会

直播预告丨走进云溪数据库之高可用方案

云计算

webrtc simulcast 开启

webrtc developer

webrtc、 simulcast,

Alibaba船新制作“Java架构核心宝典”,全是流行技术,限时开放

Java 程序员 架构 面试 计算机

面试被问Tomcat整体架构设计,深入浅出Java开发

Java 程序员 后端

研发工具链介绍

百度开发者中心

学习 最佳实践 方法论 研发工具

区块链“牵手”金融 面临诸多挑战

CECBC

恒源云(GpuShare)_GPU租用保姆级教程,助力深度学习训练!

恒源云

面试官都被搞懵了,阿里P7亲自讲解

Java 程序员 后端

交Y所K线机器人系统开发功能介绍(源码搭建)

量化系统19942438797

机器人 k线

联邦学习框架浅析

趣链科技

面试讲不清MySQL索引底层,Java面试

Java 程序员 后端

(AL智博会)2021南京国际人工智能主题展

南京专业智博会

人工智能展览会 人工智能论坛会 人工智能智博会

《中国梦》打造数亿中产阶级!疯了,疯了,全涨疯了!!

CECBC

阿里大佬怒写“Java初学者宝典”,让你就业没压力

Java 阿里巴巴 程序员 面试 计算机

南京主题展2021国际大数据产业展会/论坛会

南京专业智博会

大数据 智博会 南京智博会

2021南京国际智慧工地装备展览会

南京专业智博会

智博会 智慧工地展览会 智慧工地论坛会

Serverless 工程实践 | Serverless 应用开发观念的转变

阿里巴巴云原生

Serverless Serverless架构

面试官问的那些Java原理你都懂吗,Java面试手写代码题目

Java 程序员 后端

物联世界2021南京物联网展览会

南京专业智博会

物联网展览会 物联网论坛会 物联网智博会

模块三作业:学生管理系统架构设计文档

apple

乘风破浪携手共赢——博睿数据深圳渠道大会圆满落幕

博睿数据

【Vuex 源码学习】第四篇 - Vuex 中 Getters 的实现

Brave

源码 vuex 9月日更

Vite + Vue3 + OpenLayers 手动控制缩放级别

德育处主任

大前端 地图 vite openlayers Vue 3

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