DotNetty完全教程(八)

本文是DotNetty完全教程的第八部分,主要探讨EventLoop的概念和作用。EventLoop作为Selector与线程的结合体,负责处理多个Channel。内容包括EventLoop的介绍、任务调度以及Group的说明。在任务调度中,介绍了如何利用EventLoop进行延时任务的安排,并强调避免在EventLoop执行耗时任务。至于Group,它是多个Channel与EventLoop之间的桥梁,确保资源的合理分配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

EventLoop

介绍

我们先回顾一下,EventLoop就是我们在最开始的示意图中的Selector,每个EventLoop和一个线程绑定,用于处理多个Channel。

任务调度

  1. 如果我们想实现延时任务的调度,比如连接成功5s之后发送一包数据,就可以用到EventLoop的计划任务
    ctx.Channel.EventLoop.Schedule(() =>
    {
        Console.WriteLine("delay 1s");
    }, new TimeSpan(1000));
    // 如果需要提前取消,可以调用Cancel方法
    IScheduledTask task = ctx.Channel.EventLoop.Schedule(() =>
    {
        Console.WriteLine("delay 1s");
    }, new TimeSpan(1000));
    tsak.Cancel();
    
  2. 一个任务引发后,会判断当前是否在需要处理这个任务的EventLoop中(程序知道自己目前在执行哪个线程,线程又跟EventLoop对应),如果在就直接执行该任务,如果不在该任务中,则任务入队稍后处理
  3. 永远不要把一个需要耗费长时间的任务放到EventLoop执行队列来执行,需要使用我们前面介绍的EventExecutor的方法。

Group

许多Channel对应一个EventLoop,但是EventLoop能分配给她的Channel个数是有限的,要处理可以扩展的无数个Channel就需要EventLoopGroup。他们的结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值