并发系列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 ...
随机推荐
- Codeforces Round #851 (Div. 2) 题解
Codeforces Round #851 (Div. 2) 题解 A. One and Two 取 \(\log_2\),变成加号,前缀和枚举 \(s[i]=\dfrac{s[n]}{2}\). B ...
- WPF开源的一款免费、开箱即用的翻译、OCR工具
前言 今天大姚给大家分享一款由WPF开源的.免费的(MIT License).即开即用.即用即走的翻译.OCR工具:STranslate. WPF介绍 WPF 是一个强大的桌面应用程序框架,用于构建具 ...
- 云计算 - 内容分发网络CDN技术与应用全解
在这篇全面解析CDN的技术文章中,我们深入探讨了CDN的基础概念.核心架构.多样化产品和在不同行业中的应用案例.文章揭示了CDN技术如何优化内容分发,提升用户体验,并展望了CDN面临的挑战和未来发展趋 ...
- arch安装discover ——KDE商店
yay -S discover sudo pacman -S archlinux-appstream-data packagekit-qt5 flatpak fwupd 安装完就可以使用KDE商店了
- 基于ESP8266的JSON解析实例分析
什么是JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.采用完全独立于编程语言的文本格式来存储和表示数据.其简洁和层次结构清晰的特点使得 J ...
- 自我总结的git的使用
git是什么 git是一个分布式版本控制工具,github是代码托管平台. git有什么用 保存文件的所有修改记录 使用版本号进行区分 随时可浏览历史版本记录 可还原到历史指定版本 对比不同版本的文件 ...
- 如何在UE4中播放本地视频文件?
在UE4中有一套媒体框架方法,它根据视频源的不同,对应的播放方式也不一样,支持的视频源有本地视频文件.影像序列.视频流.实时视频截图.播放形式可选择在场景内的静态网格上播放或者以UI的形式播放.本文主 ...
- python基础四(字符编码)
一 了解字符编码的知识储备 计算机基础知识 文本编辑器存取文件的原理(nodepad++,pycharm,word) #1.打开编辑器就打开了启动了一个进程,是在内存中的,所以,用编辑器编写的内容也都 ...
- 三维模型3DTile格式轻量化云端处理技术方法分析
三维模型3DTile格式轻量化云端处理技术方法分析 在现代的地理信息系统 (GIS) 中,3D Tiles 是一种很重要的数据格式,用于存储和传输大规模地理空间数据.然而,由于其数据密度高,传输和加载 ...
- Python 如何发送带Excel附件的邮件
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart f ...