当前位置: 首页 > news >正文

关于党的网页设计seo文章代写平台

关于党的网页设计,seo文章代写平台,湘潭网站建设 x磐石网络,飞鱼网站建设一、DefaultEventExecutorGroup的用途 DefaultEventExecutorGroup 是 Netty 框架中的一个类,用于管理和调度事件处理器(EventExecutor)的组。在 Netty 中,事件处理是通过多线程来完成的,EventExecutor 是处理事件的基…

一、DefaultEventExecutorGroup的用途

DefaultEventExecutorGroup 是 Netty 框架中的一个类,用于管理和调度事件处理器(EventExecutor)的组。在 Netty 中,事件处理是通过多线程来完成的,EventExecutor 是处理事件的基本单位,而 EventExecutorGroup 则是对多个 EventExecutor 进行管理和调度的抽象。

具体来说,DefaultEventExecutorGroup 具有以下主要用途:

  1. 多线程事件处理: DefaultEventExecutorGroup 会创建多个 EventExecutor 实例,每个实例都在独立的线程中执行事件处理。这有助于提高并发性能,允许多个事件可以并行地在不同线程中处理。

  2. 任务调度: 除了处理事件,EventExecutor 还可以用于执行定时任务和异步任务。DefaultEventExecutorGroup 可以用来调度这些任务,以避免在 Netty 的主事件循环中执行耗时任务导致阻塞。

  3. 避免阻塞主事件循环: 如果一个事件处理器的执行时间较长,可能会影响 Netty 的主事件循环的性能。将这些处理器放在 DefaultEventExecutorGroup 中,可以确保它们在独立的线程中执行,不会阻塞主事件循环。

  4. 资源隔离: 由于每个 EventExecutor 都在独立的线程中运行,因此它们之间是隔离的,一个处理器的异常不会影响其他处理器和主事件循环。

使用 DefaultEventExecutorGroup 时,您可以将处理事件的线程和主事件循环的线程分离开,从而提高应用程序的性能和稳定性。但是需要注意的是,创建多个线程可能会带来一些额外的开销和管理成本,需要根据具体情况进行权衡和优化。

总之,DefaultEventExecutorGroup 是 Netty 提供的一个强大工具,可以帮助您更好地管理事件处理和任务调度,提高网络应用程序的性能和可靠性。

二、使用示例

private static DefaultEventExecutorGroup defaultEventExecutorGroup =new DefaultEventExecutorGroup((Runtime.getRuntime().availableProcessors() * 2));// NettyServerHandler-业务处理类
pipeline.addLast(defaultEventExecutorGroup, "handler", new NettyServerHandler());
  • 接口ChannelPipeline

我们这里使用的是第二个方法

    ChannelPipeline addLast(String var1, ChannelHandler var2);ChannelPipeline addLast(EventExecutorGroup var1, String var2, ChannelHandler var3);ChannelPipeline addLast(ChannelHandler... var1);ChannelPipeline addLast(EventExecutorGroup var1, ChannelHandler... var2);
  • addLast实现,见类io.netty.channel.DefaultChannelPipeline
    在这里插入图片描述
    可以看到,它是异步执行的,将work线程和I/O线程隔离开来。

从代码newCtx = this.newContext(group, this.filterName(name, handler), handler);继续往后看线程池EventExecutor。

在这里插入图片描述

三、DefaultEventExecutor.java

  • 类的继承关系,它继承于SingleThreadEventExecutor,详情见下
    在这里插入图片描述
  • DefaultEventExecutorGroup和DefaultEventExecutor的关系
    在这里插入图片描述
  • DefaultEventExecutor的核心方法run()
    protected void run() {do {Runnable task = this.takeTask();if (task != null) {task.run();this.updateLastExecutionTime();}} while(!this.confirmShutdown());}
  • 关键类io.netty.util.concurrent.SingleThreadEventExecutor
    看它的takeTask()方法,使用了BlockingQueue阻塞队列。
protected Runnable takeTask() {assert this.inEventLoop();if (!(this.taskQueue instanceof BlockingQueue)) {throw new UnsupportedOperationException();} else {BlockingQueue taskQueue = (BlockingQueue)this.taskQueue;Runnable task;do {ScheduledFutureTask<?> scheduledTask = this.peekScheduledTask();if (scheduledTask == null) {Runnable task = null;try {task = (Runnable)taskQueue.take();if (task == WAKEUP_TASK) {task = null;}} catch (InterruptedException var7) {}return task;}long delayNanos = scheduledTask.delayNanos();task = null;if (delayNanos > 0L) {try {task = (Runnable)taskQueue.poll(delayNanos, TimeUnit.NANOSECONDS);} catch (InterruptedException var8) {return null;}}if (task == null) {this.fetchFromScheduledTaskQueue();task = (Runnable)taskQueue.poll();}} while(task == null);return task;}}

四、总结

在将io线程和工作线程隔离的时候,建议你直接使用netty自带的并发类,而无需自己去定义业务线程池。因为它完全可胜任异步的需求。

http://www.ahscrl.com/news/11980.html

相关文章:

  • 做网络推广阿里巴巴还是网站好郑州网络推广公司排名
  • 国内看不到的中文新闻网站制作网站的公司有哪些
  • 团队建设思路和方案温州seo
  • 北京高端 网站建设站长之家的seo综合查询工具
  • 网页打不开但是有网什么原因如何解决优化建站
  • 农产品电商网站建设的总体目标兰州网络推广电话
  • 国外著名的网站设计公司谷歌关键词排名查询
  • 邯郸市住房和城乡建设网站抖音账号权重查询
  • 重庆企业网站建设联系电话磁力猫torrent kitty
  • 苏州360推广 网站建设在线一键建站系统
  • 淮北疫情最新消息今天发布会上海不限关键词优化
  • 成都那家做网站好?如何制作网站二维码
  • 莱州网站建设关键字排名优化网络托管微信代运营百度关键词搜索次数
  • 定制网站与模板网站一个企业该如何进行网络营销
  • 汽车网站名称网站运营主要做什么
  • 何做百度推广网站百度客服中心人工在线咨询
  • 上海公司黄页网站网络推广的方法有多选题
  • 开发国外优惠卷网站如何做百度上怎么发布信息啊
  • 网站后台管理系统管理员登录做网络推广需要多少钱
  • 微信公众平台开发源代码上海seo网站优化
  • 阿里云网站建设详细教程游戏推广员到底犯不犯法
  • 一个网站的预算网络推广的话术怎么说
  • 做网站公奇闻司郑州汉狮网络推广合作协议
  • 做网站需要交钱吗泰安做网站公司哪家比较好
  • 互联云主机seo关键词分类
  • 做的网站手机打不开怎么回事原版百度
  • 苏州运营推广网站建设世界球队最新排名榜
  • 如何做商城网站网页设计友情链接怎么做
  • wordpress整站主题关键词优化百家号
  • 池州网站优化公司关键词优化的发展趋势