netty通信原理

Netty是一个异步事件驱动的网络应用程序框架, 用于快速开发可维护的高性能协议服务器和客户端。它极大地简化并简化了TCP和UDP套接字服务器等网络编程。

BIO:(Blocking IO)

同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成。

在这里插入图片描述


NIO (Non-Blocking IO)

NIO是一种同步非阻塞的I/O模型,
在Java 1.4 中引入了NIO框架,对应 java.nio 包,
提供了 Channel , Selector,Buffer等抽象。

NIO中的N可以理解为Non-blocking,不单纯是New。
它支持面向缓冲的,基于通道的I/O操作方法。
NIO提供了与传统BIO模型中的 Socket 和 ServerSocket 相对应的 SocketChannel 和 ServerSocketChannel 两种不同的套接字通道实现,两种通道都支持阻塞和非阻塞两种模式。

阻塞模式使用就像传统中的支持一样,比较简单,但是性能和可靠性都不好;
非阻塞模式正好与之相反。
对于低负载、低并发的应用程序,可以使用同步阻塞I/O来提升开发速率和更好的维护性;
对于高负载、高并发的(网络)应用,应使用 NIO 的非阻塞模式来开发。
在这里插入图片描述

Selector 一般称 为选择器 ,也可以翻译为 多路复用器,选择器用于使用单个线程处理多个通道。因此,它需要较少的线程来处理这些通道。线程之间的切换对于操作系统来说是昂贵的。 因此,为了提高系统效率选择器是有用的。

Connect(连接就绪)、Accept(接受就绪)、Read(读就绪)、Write(写就绪)
Netty基本原理:
在这里插入图片描述

  1. 首先server端启动时绑定本地某个端口,初始化channel,其实就是生成channel的实例对象NioServerSocketChannel。

  2. 然后将自己NioServerSocketChannel注册到某个bossGroup(其实就是让前台经理先去接待)的NioEventLoop的selector上,每个NioEventLoop包含1个selector和1个事件循环线程

  3. 然后进入到bossGroup的循环线程中,其实就是他要怎么去处理这个“接待”的过程

    • 第一步bossGroup需要去轮询accept事件,

    • 第二步就是去处理IO事件,然后和client建立连接,生成NioSocketChannel,并将NioSocketChannel注册到某个workerGroup NioEventLoop的selector上

    • 第三步处理任务队列中的任务,runAllTasks。任务队列中的任务包括用户调用eventloop.execute或schedule执行的任务,或者其它线程提交到该eventloop的任务

  4. 完事之后任务就开始进入到了wrokGroup线程组中来去真正的干活了,因为他也是一个线程组

    • 第一步是先轮询read、write事件

    • 第二步就开始处理io任务,即read、write事件,在NioSocketChannel可读、可写事件发生时进行处理

    • 第三步还是处理任务队列中的任务,runAllTasks

参考:Netty是什么和Netty的基本原理架构

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值