zoukankan      html  css  js  c++  java
  • 并发系列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个数据流块,通过两个端点,组装成一个新的数据流块。

  • 相关阅读:
    MATLAB 之 App designer 小白学习(四)
    MATLAB 之 APP DESIGNER 学习(三)
    MATLAB 之 App designer 小白学习(二)
    MATLAB 之 App designer 小白学习(一)
    激光烧蚀 @有机聚合物
    激光驱动巨量转移工艺
    基于神经网络的函数逼近
    单片机复位电路仿真分析
    基于Python的3R机器人运动仿真
    基于MATLAB的单级倒立摆仿真
  • 原文地址:https://www.cnblogs.com/aoximin/p/12745453.html
Copyright © 2011-2022 走看看