Task任务的屏障机制
Barrier 是 .Net 提供的一直并发的机制,它允许多个任务同步他们不同阶段的并发工作。
这里的关键点是【多个任务】和【不同阶段】。
假设有4个相同的任务(Task),每个任务都有4个阶段(Phase),当他们并发工作时,只有当所有任务的相同步骤都完成时,所有任务才可以开始下一个步骤。
这里的 Barrier 就是 .NetFramework 提供的一种机制。它像一个篱笆(屏障),把所有任务的阶段隔离开来,当前阶段不完成,不会开始下一个阶段。
- static Task[] tasks = new Task[];
- static Barrier barrier = null;
- public void Test()
- {
- barrier = new Barrier(tasks.Length, (i) =>
- {
- Console.WriteLine("**********************************************************");
- Console.WriteLine("\n屏障中当前阶段编号:{0}\n", i.CurrentPhaseNumber);
- Console.WriteLine("**********************************************************");
- });
- for (int i = ; i < tasks.Length; i++)
- {
- tasks[i] = Task.Factory.StartNew((obj) =>
- {
- var single = Convert.ToInt32(obj);
- Console.WriteLine("当前任务:{0}正在加载User部分数据!", single);
- barrier.SignalAndWait();
- Console.WriteLine("当前任务:{0}正在加载Product部分数据!", single);
- barrier.SignalAndWait();
- Console.WriteLine("当前任务:{0}正在加载Order部分数据!", single);
- barrier.SignalAndWait();
- }, i);
- }
- Task.WaitAll(tasks);
- Console.WriteLine("全部加载完毕");
- }
执行结果
Task任务的屏障机制的更多相关文章
- Scalaz(45)- concurrency :Task-函数式多线程编程核心配件
我们在上一节讨论了scalaz Future,我们说它是一个不完善的类型,最起码没有完整的异常处理机制,只能用在构建类库之类的内部环境.如果scalaz在Future类定义中增加异常处理工具的话,用户 ...
- MapReduce实例2(自定义compare、partition)& shuffle机制
MapReduce实例2(自定义compare.partition)& shuffle机制 实例:统计流量 有一份流量数据,结构是:时间戳.手机号.....上行流量.下行流量,需求是统计每个用 ...
- Spark2.x(六十三):(Spark2.4)Driver如何把Task(闭包等)分配给Executor
在Spark中一个appliation可能包含多个job,每个job都是由SparkContext#runJob(...)触发的,一个Job下包含1个或多个Stage,Job的最后一个stage为Re ...
- 高速缓存一致性协议MESI与内存屏障
一.CPU高速缓存简单介绍 CPU高速缓存机制的引入,主要是为了解决CPU越来越快的运行速度与相对较慢的主存访问速度的矛盾.CPU中的寄存器数量有限,在执行内存寻址指令时,经常需要从内存中读取指令所需 ...
- 内存屏障 WriteBarrier 垃圾回收 屏障技术
https://baike.baidu.com/item/内存屏障 内存屏障,也称内存栅栏,内存栅障,屏障指令等, 是一类同步屏障指令,是CPU或编译器在对内存随机访问的操作中的一个同步点,使得此点之 ...
- 关于Handler同步屏障你可能不知道的问题
前言 很高兴遇见你 ~ 关于handler的内容,基本每个android开发者都掌握了,网络中的优秀博客也非常多,我之前也写过一篇文章,读者感兴趣可以去看看:传送门. 这篇文章主要讲Handler中的 ...
- golang GC 垃圾回收机制
垃圾回收(Garbage Collection,简称GC)是编程语言中提供的自动的内存管理机制,自动释放不需要的对象,让出存储器资源,无需程序员手动执行. Golang中的垃圾回收主要应用三色标记法, ...
- Goland的GC回收机制
Goland的GC回收机制 GC触发的条件 阈值:默认内存扩大一倍,启动gc 定期:默认2min触发一次gc,src/runtime/proc.go:forcegcperiod 手动:runtime. ...
- .NET Framework4.0 下的多线程
一.简介 在4.0之前,多线程只能用Thread或者ThreadPool,而4.0下提供了功能强大的Task处理方式,这样免去了程序员自己维护线程池,而且可以申请取消线程等...所以本文主要描述Tas ...
随机推荐
- html5离线记事本
离线记事本 这是一个笔记应用,不需要联网,也不需要数据库,可以直接把数据储存在本地.方便易用! ^_^ <!DOCTYPE html> <html> <head> ...
- whistle工具全程入门
接触过前后端开发的同学应该都了解网络请求代理工具fiddler(mac下面常用的是Charles),可以用来拦截分析请求.包装请求.本地调试和移动端代理开发调试等.多多少少,fiddler和Charl ...
- u3d摇杆
using UnityEngine; using System.Collections; public class JoystickController : MonoBehaviour { priva ...
- 在 C# 中,(int) ,Int32.Parse() 和 Convert.toInt32() 三种方法的区别
在 C# 中,(int),Int32.Parse() 和 Convert.toInt32() 三种方法有何区别? int 关键字表示一种整型,是32位的,它的 .NET Framework 类型为 S ...
- selenium——表单嵌套
<html> <iframe id="id-iframe" name="iframee1"> --切换表单 <html> & ...
- C#winform 窗体缩放自适应
1. 首先在窗体上放上一个Panel容器,并将容器的Dock属性设为Fill,即所有的控件都放在了这个容器里. using System; using System.Collections.Gene ...
- 解决tomcat报错javax.imageio.IIOException: Can't create output stream!
启动tomcat catalina.out报错如下,登陆的时候无法显示验证码 2017-06-09 11:23:06,628 DEBUG org.springframework.web.servlet ...
- Vue -cli 入门 --项目搭建(一)
一. 安装node.js环境. 在node.js官网下载稳定版本(https://nodejs.org/en/) 下载完成后点击安装,安装过程很简单,一直next即可,安装完成会自动添加node及np ...
- tcp和udp协议的聊天 和udp协议的时间同步机制-----编码
tcp协议聊天 服务端:: 客户端 udp协议的聊天 ############ udp协议 ########### 服务器 import socket sk = socket.socket(type ...
- 前端 ----jQuery的介绍
01-jQuery的介绍 1.为什么要使用jQuery 在用js写代码时,会遇到一些问题: window.onload 事件有事件覆盖的问题,因此只能写一个事件. 代码容错性差. 浏览器兼容性问题 ...