美文网首页
Netty业务处理线程池的选择

Netty业务处理线程池的选择

作者: 知止9528 | 来源:发表于2019-01-20 21:55 被阅读159次

根据我们前面分析的,接收到消息后,为了避免在I/O线程里执行耗时的操作,一般都会使用线程池来执行业务处理逻辑.

那是使用Netty提供给我们的方法,传入一个线程池还是使用我们自己定义的线程池好呢?

先来看Netty给我们提供的

ChannelPipeline addLast(EventExecutorGroup group, String name, ChannelHandler handler);

即我们添加handler的时候可以传入一个线程池进去
DefaultEventExecutorGroup

它与NioEventLoop之间的区别又是什么?

NioEventLoop

侧重于处理网络I/O相关的各种事件,例如连接操作,消息读取和发送操作

DefaultEventExecutor

侧重于处理业务相关的逻辑,将业务的ChannelHandler与具体的DefaultEventExecutor绑定起来.

EventLoop继承图.png

其次

对于某个客户端连接Channel,只会注册到一个NioEventLoop线程中,用于处理网络I/O操作,业务的ChannelHandler指定了运行线程池EventLoopGroup之后,创建ChannelHandlerContext上下文时会从EventLoopGroup中选择一个EventExecutor绑定到该Channel对应的ChannelHandler实例.

也就是说使用netty提供默认的,是绑定的.如下图

业务绑定EventExecutor模型的线程模型.png

使用我们自己定义的线程池

业务自定义线程池模型的线程模型.png

虽然LinkedBlockQueue通过读写锁来提升性能,但是当业务线程数和写操作比较多时,锁竞争对性能的影响还是比较大的。

如果采用自定义线程池时,优化方向就是锁消除.
可以使用Disruptor或者使用ChannelId与业务线程池中的某个业务进行绑定

相关文章

  • 3. Dubbo线程池模型

    dubbo有两种线程池,io线程池、业务线程池以netty作为io框架为例:boss线程池: 主要处理新的连接请求...

  • Netty业务处理线程池的选择

    根据我们前面分析的,接收到消息后,为了避免在I/O线程里执行耗时的操作,一般都会使用线程池来执行业务处理逻辑. 那...

  • Netty高级功能(三):性能指标采集监控

    1、Netty I/O线程池性能统计 线程池(workGroup)中待线程(NioEventLoop)处理的消息队...

  • Java线程池 ThreadPoolExecutor 业务线程池

    1.什么是业务线程池? 在业务开发中,用来处理业务的线程池。 2.为什么需要业务线程池? 大多数同学都是做业务开发...

  • 第六章、服务器业务逻辑处理框架

    6.1、业务处理逻辑之多线程、线程池实战//(3.1)为什么引入线程池//我们完全不推荐用单线程的方式解决逻辑业务...

  • 一次生产Dubbo线程池EXHAUST错误排查

    前言 Dubbo是一个阿里开源的一款RPC框架,底层网络通信基于Netty,并且分离了业务线程池和IO线程池,本次...

  • Netty线程模型

    Netty通过Reactor模型基于多路复用器接收并处理用户请求,内部实现了两个线程池,boss线程池和work线...

  • Netty 线程模型

    Netty通过Reactor模型基于多路复用器接收并处理用户请求,内部实现了两个线程池,boss线程池和work线...

  • netty inEventLoop

    最近学习netty源代码,inEventLoop方法是很关键的地方,保证相关处理在一个线程进行。 一般线程池的实现...

  • servlet异步和同步原理的个人理解

    我的理解是Servlet3.0之前,就算你在处理业务时,使用了线程池来异步处理,但是在调用线程池的这个tomcat...

网友评论

      本文标题:Netty业务处理线程池的选择

      本文链接:https://www.haomeiwen.com/subject/raefjqtx.html