Netty进阶之路-I/O线程和业务线程分离

8 篇文章 1 订阅

Netty进阶之路-I/O线程和业务线程分离

前言

之前我们对于Netty的客户端进行了优化,现在我们来看看服务端有哪些地方可以优化。

Netty的线程模型

目前服务端我们通常用的就是主从Reactor多线程模型
一个线程组用于接收客户端的连接请求
一个线程组用于处理I/O相关的读写或者执行系统Task和定时任务

		//netty主从线程模型(建立2个线程组) 一个用于网络读写   一个用于和客户端进行连接 
        final EventLoopGroup bossGroup=new NioEventLoopGroup(2);
        final EventLoopGroup workerGroup=new NioEventLoopGroup(4);
        //final EventExecutorGroup businessGroup = new DefaultEventExecutorGroup(4);
        try {
            //启动辅助类 用于配置各种参数
            ServerBootstrap b=new ServerBootstrap();
            b.group(bossGroup,workerGroup)

I/O线程和业务线程

对于RPC框架来说,客户端调用服务,服务端的操作基本都是修改数据库数据或者获取数据库数据。对于数据库的操作我们可以认为是比较耗时的,所以在Netty的I/O线程中我们不适合处理这些操作。

I/O线程:在我看来对于服务端来说Netty的I/O线程是处理客户端的连接和处理数据读写的(根据主从Reactor多线程模型,已经将网络读写 和客户端进行连接分开),对于耗时的业务逻辑来说是不适合也在I/O线程中执行的。

业务线程:处理比较耗时的业务。

解决思路

既然我们已经找到了可以优化的点,那我们就可以开始进行优化了。

  1. 第一中方法是在添加 pipeline 中的 handler 时候,添加一个Netty提供的线程池
  2. 在ChannelHandler的回调方法中,使用自己定义的业务线程池,这样就可以实现异步调用。

后面的内容我将来分析一下这两种方法,并且记录一下自己踩的坑

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值