前言

续第七章。

正文

数据流块的并行处理

数据流块在网格上本身就是并行的,为什么这么说呢?

加入有两个数据库,他们链接在一起,然后给他们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 数据流(二))第八章的更多相关文章

  1. 并发系列64章(TPL 数据流)第七章

    前言 什么是TPL?全称:transmission control protocol 传输层对应于OSI七层参考模型的传输层,它提供两种端到端的通信服务. 然后思维方式回到为什么有这个TPL 数据流上 ...

  2. Java 并发系列之二:java 并发机制的底层实现原理

    1. 处理器实现原子操作 2. volatile /** 补充: 主要作用:内存可见性,是变量在多个线程中可见,修饰变量,解决一写多读的问题. 轻量级的synchronized,不会造成阻塞.性能比s ...

  3. Linux就这个范儿 第13章 打通任督二脉

    Linux就这个范儿 第13章 打通任督二脉 0111010110……你有没有想过,数据从看得见或看不见的线缆上飞来飞去,是怎么实现的呢?数据传输业务的未来又在哪里?在前面两章中我们学习了Linux网 ...

  4. java高并发系列 - 第22天:java中底层工具类Unsafe,高手必须要了解

    这是java高并发系列第22篇文章,文章基于jdk1.8环境. 本文主要内容 基本介绍. 通过反射获取Unsafe实例 Unsafe中的CAS操作 Unsafe中原子操作相关方法介绍 Unsafe中线 ...

  5. java高并发系列 - 第23天:JUC中原子类,一篇就够了

    这是java高并发系列第23篇文章,环境:jdk1.8. 本文主要内容 JUC中的原子类介绍 介绍基本类型原子类 介绍数组类型原子类 介绍引用类型原子类 介绍对象属性修改相关原子类 预备知识 JUC中 ...

  6. Java高并发系列——检视阅读

    Java高并发系列--检视阅读 参考 java高并发系列 liaoxuefeng Java教程 CompletableFuture AQS原理没讲,需要找资料补充. JUC中常见的集合原来没讲,比如C ...

  7. C#基础系列——委托和设计模式(二)

    前言:前篇 C#基础系列——委托实现简单设计模式 简单介绍了下委托的定义及简单用法.这篇打算从设计模式的角度去解析下委托的使用.我们知道使用委托可以实现对象行为(方法)的动态绑定,从而提高设计的灵活性 ...

  8. WEBGL 2D游戏引擎研发系列 第一章 <新的开始>

    WEBGL 2D游戏引擎研发系列 第一章 <新的开始> ~\(≥▽≤)/~HTML5游戏开发者社区(群号:326492427) 转载请注明出处:http://html5gamedev.or ...

  9. Java并发系列[2]----AbstractQueuedSynchronizer源码分析之独占模式

    在上一篇<Java并发系列[1]----AbstractQueuedSynchronizer源码分析之概要分析>中我们介绍了AbstractQueuedSynchronizer基本的一些概 ...

  10. java高并发系列 - 第17天:JUC中的循环栅栏CyclicBarrier常见的6种使用场景及代码示例

    这是java高并发系列第17篇. 本文主要内容: 介绍CyclicBarrier 6个示例介绍CyclicBarrier的使用 对比CyclicBarrier和CountDownLatch Cycli ...

随机推荐

  1. 关于Java并发多线程的一点思考

    写在开头 在过去的2023年双11活动中,天猫的累计访问人次达到了8亿,京东超60个品牌销售破10亿,直播观看人数3.0亿人次,订单支付频率1分钟之内可达百万级峰值,这样的瞬间高并发活动,给服务端带来 ...

  2. WireShark学习笔记(一)

    1.从WireShark分析网络层协议的传输 下面是网络接口层协议,从图中可以看到两个相邻设备的MAC地址,因此该网络包才能以接力的方式传送到目的地址. 下面是网络层,在这个包中,主要的任务是把TCP ...

  3. Apollo获取配置异常:Load config failed, will retry in 1 SECONDS

    一.现象 apollo开启秘钥,服务获取配置参数需要启动参数中添加:jvm参数-Dapollo.accesskey.secret=XXX.日志如下: 二.解决方案 应用服务器时间异常,重置应用服务器时 ...

  4. Spring状态机(FSM),让订单状态流转如丝般顺滑

    引言 在复杂的应用程序设计中,尤其是那些涉及多个状态变迁和业务流程控制的场景,有限状态机(Finite State Machine, FSM)是一种强大而有效的建模工具.Spring框架为此提供了Sp ...

  5. 【机器学习】统计学习方法读书笔记-EM算法(期望最大化算法)

    Expectation Maximization,EM算法是带有隐变量的概率模型参数的极大似然估计(MLE为给定参数,观测数据出现/生成的可能性). 如下为<统计机器学习>中对应EM算法的 ...

  6. Github+picGo搭建图床(搭配Typora)

    使用Github+picGo搭建图床,保姆级教程来了 - 转载自知乎 (zhihu.com) 1. 注册一个Github账号 首先你需要一个github账号,如果没有的话,先注册. github官网地 ...

  7. 在LabVIEW中编程运行可执行程序

    以下文字来自于 https://knowledge.ni.com/KnowledgeArticleDetails?id=kA03q000000YGhVCAW&l=en-US 翻译来自于Chat ...

  8. 三维模型3DTile格式轻量化压缩的遇到常见问题与处理方法分析

    三维模型3DTile格式轻量化压缩的遇到常见问题与处理方法分析 三维模型的轻量化压缩是一项技术挑战,特别是在处理复杂的3DTile格式时.下面列举了一些处理过程中可能遇到的常见问题以及相应的处理方法: ...

  9. 记录--对于$off,Exclude 和 Extract的一点理解

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.typescript 高阶类型 Exclude 和 Extract Exclude<T, U> TypeScript 2. ...

  10. kali2.0 metasploit安装

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_40943540/arti ...