TPL 之七 TDF中的负载均衡

(一)TDF中的负载均衡  【代码地址-Blance1】
我们可以使用Block很方便的构成一个生产者消费者的模式来处理数据。当生产者产生数据的速度快于消费者的时候,消费者Block的Buffer中的数据会越来越多,消耗大量的内存,数据处理也会延时。这时,我们可以用一个生产者Block连接多个消费者Block来解决这个问题。由于多个消费者Block一定是并行处理,所以对共享资源的处理一定要做同步处理。
使用BoundedCapacity属性来实现
当连接多个ActionBlock的时候,可以通过设置ActionBlock的BoundedCapacity属性。当第一个满了,就会放到第二个,第二个满了就会放到第三个。

public static BufferBlock<string> bb = new BufferBlock<string>();
private const string DateFormat = "yyyy-MM-dd HH:mm:ss.fff";
public Form1()
{
    InitializeComponent();
    bb.LinkTo(ab1);
    bb.LinkTo(ab2);
    bb.LinkTo(ab3);
    for (int i = 1; i <= 20; i++)
    {
        Thread.Sleep(10);
        string str = $"【BufferBlock Post:{DateTime.Now.ToString(DateFormat)} 值:{i} bb长度:{bb.Count}】";
        bb.Post(str);
    }
}
public static ActionBlock<string> ab1 = new ActionBlock<string>((i) =>
{
    Thread.Sleep(1000);
    Console.WriteLine($"【ab1】{DateTime.Now.ToString(DateFormat)}  {i} ab1长度:{ab1.InputCount} bb长度:{bb.Count}");
}
, new ExecutionDataflowBlockOptions() { BoundedCapacity = 2 });
public static ActionBlock<string> ab2 = new ActionBlock<string>((i) =>
{
    Thread.Sleep(2000);
    Console.WriteLine($"【ab2】{DateTime.Now.ToString(DateFormat)}  {i} ab2长度:{ab2.InputCount} bb长度:{bb.Count}");
}
, new ExecutionDataflowBlockOptions() { BoundedCapacity = 2 });
public static ActionBlock<string> ab3 = new ActionBlock<string>((i) =>
{
    Thread.Sleep(3000);
    Console.WriteLine($"【ab3】{DateTime.Now.ToString(DateFormat)}  {i} ab3长度:{ab3.InputCount} bb长度:{bb.Count}");
}

, new ExecutionDataflowBlockOptions() { BoundedCapacity = 2 });

image

分析以上数据可知:

image

posted @   李华丽  阅读(141)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
历史上的今天:
2016-06-15 Promise 异步(asynchronous )编程
AmazingCounters.com
点击右上角即可分享
微信分享提示