Netty 基本概念

本文介绍了Netty,一个用于快速开发高性能网络应用的Java框架,强调其基于NIO的异步编程和Reactor模型。重点讨论了BIO、NIO和AIO的区别,以及Netty推荐的多线程模型在高并发场景的应用。
摘要由CSDN通过智能技术生成

简介

_Netty_ 是由 JBoss 提供的一个 Java 开源框架,提供异步的、事件驱动的网络应用程序框架,用以快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说,_Netty_ 是一个基于 NIO 的客户端、服务端编程框架,使用 Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户、服务端应用。_Netty_ 相当于简化和流线化了网络应用的编程开发过程,例如:基于TCP和UDP的socket服务开发。
_Netty_ 是一个具有吸收了多种协议(包括 FTP、SMTP、HTTP 等各种二进制文本协议)的实现经验、且经过想的精心设计的项目,在保证易于开发的同时还保证了其应用的性能、稳定性、伸缩性。

优点

  • _Netty_ 提供了简单易用的 API,易学习、易上手
  • 基于事件驱动的编程方式来编写网络通信程序
  • 高吞吐量、高性能

BIO、NIO、AIO

  • 阻塞\非阻塞:线程访问资源,资源是否就绪
  • 同步\异步:访问资源的一种机制
  • BIO:同步阻塞 IO ~ Block IO
    • IO 操作时会阻塞线程,并发处理能力低
    • 我们熟知的 Socket 编程就是 BIO,一个 socket 连接一个处理线程(这个线程负责这个 Socket 连接的一系列数据传输操作)。
    • 阻塞的原因在于:操作系统允许的线程数量是有限的,多个 socket 申请与服务端建立连接时,服务端不能提供相应数量的处理线程,没有分配到处理线程的连接就会阻塞等待或被拒绝。
  • NIO:同步非阻塞 IO ~ None Block IO
    • NIO 是对 BIO 的改进,基于 Reactor 模型
    • 问题:我们知道,一个 socket 连接只有在特定时候才会发生数据传输 IO 操作,大部分时间这个“数据通道”是空闲的,但还是占用着线程。
    • 处理:NIO 作出的处理方式就是 一个请求一个线程,在连接到服务端的众多 socket 中,只有需要进行 IO 操作的才能获取服务端的处理线程进行 IO,这样就不会因为线程不够用而限制了 socket 的接入
  • AIO:异步非阻塞 IO ~ Async NIO NIO 2.0
    • 这种 IO 模型由操作系统先完成客户端的请求,然后再通知服务器去启动线程进行处理
    • AIO 也称 NIO 2.0,在 JDK7 开始支持

Netty Reactor 模型

单线程模型
  • 说明
    • 用户发起 IO 请求到 Reactor 线程,Reactor 线程将用户的 IO 请求放入到通道,然后再进行后续处理,处理完后 Reactor 线程重新获得控制权,继续其他客户端的处理
  • 缺点:一个时间点只有一个任务在执行,这个任务执行完了,再去执行下一个任务
    • 单线程的 Reactor 模型每一个用户都在一个线程中执行
    • 性能有极限,不能处理成百上千的事件
    • 当负荷达到一定程度时,性能会下降
    • 当某一个事件处理器发生故障,不能继续处理其他事件
多线程模型
  • Reactor 多线程模型是由一组 NIO 线程来处理 IO 操作,效率更高
  • 这种模型使用多个线程执行多个任务,任务可以同时执行
  • 如果并发仍然很大,Reactor 仍然无法处理大量的客户端请求
主从多线程模型❤️❤️❤️❤️❤️
  • Netty 推荐使用的线程模型,适用于高并发场景,一组线程池接收请求。一组线程池处理 IO

架构

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值