美文网首页Netty
Netty线程模型

Netty线程模型

作者: Real_man | 来源:发表于2019-01-03 19:18 被阅读86次

    线程模型设计的好坏,决定了系统的吞吐量,并发性和安全性能架构质量属性。Netty线程模型被精心的设计,既提升了并发性,又在很大程度避免锁,局部进行了无锁优化。

    Netty线程模型

    image

    Netty服务端在启动的时候,创建了两个NioEventLoopGroup,它们实际是两个独立的Reactor线程池,一个用于接收客户端的TCP连接,另一个用于处理I/O相关的读写操作,或者执行系统Task,定时任务Task等。

    Netty用于接收客户端请求的线程池职责如下:

    • 接收客户端TCP连接,初始化Channel参数
    • 将链路状态变更事件通知给ChannelPipeline

    Netty处理I/O操作的线程池职责如下:

    • 异步读取通信对端的数据报,发送读事件到ChannelPipeLine
    • 异步发送消息到通信对端,调用ChannelPipeLine的消息发送接口
    • 执行系统调用Task
    • 执行定时任务Task

    最佳实践

    Netty的多线程编程最佳实践如下:

    • 尽量不要再ChannelHandler中启动用户线程(解码后用于将POJO消息派发到后端业务线程的除外)
    • 解码要放在NIO线程调度用的解码Handler中进行,不要切换到用户线程完成消息的解码。专门的类做专门的事,Netty内部提供了编码与解码的抽象类
    • 如果用户业务逻辑复杂,不要再NIO线程上完成,建议派发到业务线程中执行,以保证NIO线程尽快被释放
    • 如果用户业务逻辑简单,可以直接在NIO线程上完成。

    最后

    学习Netty的笔记,参考《Netty 权威指南》

    相关文章

      网友评论

        本文标题:Netty线程模型

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