并发系列64章(TPL 数据流(二))第八章
前言
续第七章。
正文
数据流块的并行处理
数据流块在网格上本身就是并行的,为什么这么说呢?
加入有两个数据库,他们链接在一起,然后给他们post数据。

当数据流块一在运行的时候,数据流块二也在执行,他们是并行的。
那么我上面说的是数据流块本身并行。也就是说一个数据流块可以同时处理多组数据。
在Microsoft.Tpl.dataflow 库中仅仅需要设置不限制每次处理数量为1即可:MaxDegreeOfParallelism=DataflowBlockOptions.Unbounded
var multiplyBlock = new TransformBlock<int, int>(item =>
{
if (item == 1)
{
throw new InvalidOperationException("not good");
}
Console.WriteLine("item:" + item);
return item * 2;
},new ExecutionDataflowBlockOptions {
MaxDegreeOfParallelism=DataflowBlockOptions.Unbounded
}
);
var subtractBlock = new TransformBlock<int, int>(item => {
return item - 2;
});
multiplyBlock.LinkTo(subtractBlock);
创建自定义数据流块
希望一些重用的程序逻辑在自定义数据流块中可以重用。
static void Main(string[] args)
{
var newblock=CreateMyCustomBlock();
newblock.Post(2);
var result = newblock.Receive();
Console.WriteLine();
Console.ReadKey();
}
static IPropagatorBlock<int, int> CreateMyCustomBlock()
{
var multiplyBlock = new TransformBlock<int, int>(item =>
{
if (item == 1)
{
throw new InvalidOperationException("not good");
}
Console.WriteLine("item:" + item);
return item * 2;
},new ExecutionDataflowBlockOptions {
MaxDegreeOfParallelism=DataflowBlockOptions.Unbounded
}
);
var subtractBlock = new TransformBlock<int, int>(item => {
return item - 2;
});
var addBlock = new TransformBlock<int, int>(item =>
{
return item + 10;
});
multiplyBlock.LinkTo(subtractBlock);
subtractBlock.LinkTo(addBlock);
return DataflowBlock.Encapsulate(multiplyBlock,addBlock);
}
上面的是什麽意思呢?

实际上就是组装,原本三个窜型的3个数据流块,通过两个端点,组装成一个新的数据流块。
并发系列64章(TPL 数据流(二))第八章的更多相关文章
- 并发系列64章(TPL 数据流)第七章
前言 什么是TPL?全称:transmission control protocol 传输层对应于OSI七层参考模型的传输层,它提供两种端到端的通信服务. 然后思维方式回到为什么有这个TPL 数据流上 ...
- Java 并发系列之二:java 并发机制的底层实现原理
1. 处理器实现原子操作 2. volatile /** 补充: 主要作用:内存可见性,是变量在多个线程中可见,修饰变量,解决一写多读的问题. 轻量级的synchronized,不会造成阻塞.性能比s ...
- Linux就这个范儿 第13章 打通任督二脉
Linux就这个范儿 第13章 打通任督二脉 0111010110……你有没有想过,数据从看得见或看不见的线缆上飞来飞去,是怎么实现的呢?数据传输业务的未来又在哪里?在前面两章中我们学习了Linux网 ...
- java高并发系列 - 第22天:java中底层工具类Unsafe,高手必须要了解
这是java高并发系列第22篇文章,文章基于jdk1.8环境. 本文主要内容 基本介绍. 通过反射获取Unsafe实例 Unsafe中的CAS操作 Unsafe中原子操作相关方法介绍 Unsafe中线 ...
- java高并发系列 - 第23天:JUC中原子类,一篇就够了
这是java高并发系列第23篇文章,环境:jdk1.8. 本文主要内容 JUC中的原子类介绍 介绍基本类型原子类 介绍数组类型原子类 介绍引用类型原子类 介绍对象属性修改相关原子类 预备知识 JUC中 ...
- Java高并发系列——检视阅读
Java高并发系列--检视阅读 参考 java高并发系列 liaoxuefeng Java教程 CompletableFuture AQS原理没讲,需要找资料补充. JUC中常见的集合原来没讲,比如C ...
- C#基础系列——委托和设计模式(二)
前言:前篇 C#基础系列——委托实现简单设计模式 简单介绍了下委托的定义及简单用法.这篇打算从设计模式的角度去解析下委托的使用.我们知道使用委托可以实现对象行为(方法)的动态绑定,从而提高设计的灵活性 ...
- WEBGL 2D游戏引擎研发系列 第一章 <新的开始>
WEBGL 2D游戏引擎研发系列 第一章 <新的开始> ~\(≥▽≤)/~HTML5游戏开发者社区(群号:326492427) 转载请注明出处:http://html5gamedev.or ...
- Java并发系列[2]----AbstractQueuedSynchronizer源码分析之独占模式
在上一篇<Java并发系列[1]----AbstractQueuedSynchronizer源码分析之概要分析>中我们介绍了AbstractQueuedSynchronizer基本的一些概 ...
- java高并发系列 - 第17天:JUC中的循环栅栏CyclicBarrier常见的6种使用场景及代码示例
这是java高并发系列第17篇. 本文主要内容: 介绍CyclicBarrier 6个示例介绍CyclicBarrier的使用 对比CyclicBarrier和CountDownLatch Cycli ...
随机推荐
- VC-MFC(1) 随笔笔记+连接数据库
1 数据库语句: 2 CREATE DATABASE---创建新数据库 3 ALTER DATABASE-----修改数据库 4 CREATE TABLE ---- -创建新表 5 ALTER TAB ...
- Find The Multiple 题解
Find The Multiple The long-lost Sunday is coming again, and the ACM Laboratory Elimination Competi ...
- 1、eureka的注册流程
客户端注册到服务端是通过http请求的 涉及到多级缓存 register注册表 源码精髓:多级缓存设计思想 在拉取注册表的时候: 首先从ReadOnlyCacheMap里查缓存的注册表. 若没有,就找 ...
- Zabbix“专家坐诊”第181期问答汇总
问题一 Q:大佬们,有没有基础的 监控模板 触发器分享下? A:你可以试一下乐维免费版(https://forum.lwops.cn/download ),里面基本的模板全齐. 问题二 Q :orab ...
- 码上掘金 里面 嵌入自定义组件,可以用做组件demo演示
查看代码片段 https://code.juejin.cn/pen/7128211910696108066 需求 将写的组件演示出来,默认 码上掘金 不能 嵌入组件. 解决问题 选择自定义模板,所有代 ...
- STM32 SPI接口 DMA normal 和circual区别
DMA有normal和circular两种模式. circular模式: 就调用这个函数一次就可以了,DMA一直开启,一帧数据发送完毕之后里面发送下一帧,中间没有停顿.这样确实是快了,也释放了CPU, ...
- 键鼠共享工具使用(软KVM)-barrier(symless开源版)
作用:通过软件方式,实现KVM,即一套键盘鼠标可以控制多台电脑,并可以进行粘贴板共享. 1.安装 打开https://github.com/debauchee/barrier,进releases下载对 ...
- 三维模型(3D)OBJ格式轻量化云端处理技术方法探讨
三维模型OBJ格式轻量化处理技术方法浅析 维模型的OBJ格式轻量化处理技术方法旨在减小模型文件大小.提高加载性能和优化渲染效果.本文将对三维模型OBJ格式轻量化处理技术方法进行浅析,并探讨其在数据压缩 ...
- docker-compose转义相关
环境变量值里面写$美元符号,用两个$符号来转义就可以了 下面的MYSQL_ROOT_PASSWORD的密码是lehuiguan!@#$,转义后写的变量就是lehuiguan!@#$$ environm ...
- AXI4从机总线分析验证之读取寄存器值
AXI4从机总线分析验证之读取寄存器值 1.实验目的 利用前面所学的AXI4总线协议的理论分析,验证如何将一个PL的输入信号通过AXI发送到PS端.大致思路就是取一个按键,信号接入自建的AXI4的IP ...