Netty框架之Selector轮询器

article/2025/9/21 10:30:52

Selector的原理详解

    • 1.传统多线程网络通信的服务器设计
    • 2.线程池版网络通信的服务器设计
    • Selector版网络通信的服务器设计

说到Selector的作用,我们不得不引入 多线程网络通信的设计

1.传统多线程网络通信的服务器设计

在这里插入图片描述
服务器每建立一个客户端连接Socket,就会创建一个线程单独处理这个Socket中的IO请求(IO读写),那么这样当连接很多的时候,势必会造成线程资源不足的问题,浪费内存空间,且处理不同连接的IO请求时会频繁的切换线程,降低CPU的利用率

缺点:
1.浪费线程资源,消耗内存空间
2.线程频繁切换开销大,降低CPU利用率

2.线程池版网络通信的服务器设计

在这里插入图片描述

基于传统版做了一定改进,既然提到线程资源不够的问题,那么采用线程池来固定线程个数,这要求Socket是非阻塞模式

阻塞模式:一个线程只负责一个Socket的IO处理,无论这个Socket是否又IO请求,如果有IO请求,那么线程处理,如果没有那么线程就阻塞等待,这样线程的利用率非常低.

非阻塞模式:一个线程可以负责多个Socket的IO处理,当Socket有IO请求时,线程池调用空闲线程去处理此Socket的IO请求,处理完毕后发现没有IO请求了,那么线程空闲下来可以用于处理其他Socket的IO请求,而不必要阻塞等待.

缺点:
连接数过多,IO量大,线程处理不过来,使得某些Socket的IO请求响应时间长,这样就需要增加线程池中线程的个数,也会导致线程不够用

Selector版网络通信的服务器设计

在这里插入图片描述
将所有建立连接的Socket的channel通道存储在selector容器中,只需要创建一个线程去不断循环遍历selector中的所有channel通道,如果发现channel通道处于读写就绪状态,那么线程去处理这个channel的IO请求,处于阻塞状态,直到IO处理完毕,继续进行轮询操作

缺点:
如果IO量非常大,那么会出现线程一直在处理一个channel的IO操作,线程一直阻塞在一个Socket通道中,造成其他Socket的长时间等待一直得不到处理,于是接下来就要引入Netty中IO多路复用的Rector模型来解决这些高并发高吞吐量的问题.


http://chatgpt.dhexx.cn/article/umDP3X9M.shtml

相关文章

netty框架学习及springboot整合集成

netty框架学习及springboot整合集成 1. Netty基本概念2. Netty框架2.1 Netty框架结构2.1 Netty NIO2.2 Reactor线程模型 3. Springboot集成netty3.1 引入jar包依赖3.2 服务端3.3 客户端 4. 参考资料 从很久以前就接触到netty,也在几个项目中使用netty进行网络通讯对…

Netty框架介绍

Netty框架介绍 一、netty(通讯框架)介紹 1、什么是netty Netty是一个基于Java NIO类库的异步通讯框架,他的架构特点是:异步非阻塞、基于事件驱动、高性能、高可靠和高定制行。 2、netty应用场景 rpc远程调用框架dubbo底层就是通…

Netty框架简述

Netty是什么? Netty 是一个广泛使用的 Java 网络编程框架,Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。Netty 的内部实现时很复杂的,但是 Netty 提供了简单易用的…

Netty框架的基本使用

Netty概述 为什么使用Netty 前面了解过的NIO模型,它有可靠性高、吞吐量高的优点,但也存在编程复杂的问题,我们要掌握大量的API,如:各种Channel、Buffer、Selector,还要编程处理特殊情况,如&am…

初识Netty框架

总体概述 Netty作为一款网络通信框架,底层封装了NIO。我们在使用Netty时,无需再关注NIO细节。下图为Netty处理流程图: 应用程序中使用Netty作为网络通信框架后,会形成一条PipeLine链,PipeLine链上有一个一个的事件处…

【java网络编程】netty框架

一、简介 netty是一个高性能、异步事件驱动的NIO框架,它基于Java Nio提供的API实现,提供了对TCP、UDP和文件传输的支持。 二、Reactor模型 Reactor是一种并发处理客户端请求响应的事件驱动模型。服务端在接收到客户端请求后采用多路复用策略&#xff0…

Netty学习二:Netty整体框架

一、Netty的整体结构和源码结构 1. Core层 提供底层网络通信的通用抽象和实现,包括可扩展的事件模型、通用的通信API和支持零拷贝的ByteBuf等。 common模块是Netty的核心基础包,提供丰富的工具类,其他模块都需要依赖该模块。常用的包括&…

Netty框架

概述 Netty 是由 JBOSS 提供的一个 Java 开源框架。Netty 提供异步的、基于事件驱动的网络应用程序框架,用以快速开发高性能、高可靠性的网络 IO 程序。 Netty 是一个基于 NIO 的网络编程框架,使用 Netty 可以帮助你快速、简单的开发出一个网络应用&…

Netty框架基本介绍

NIO 1.概述:NIO全称java non-blocking IO ,是指JDK1.4开始,java提供了一系列改进的输入/输出的新特性,被统称为NIO(即New IO )。新增了许多用于处理输入输出的类,这些类都被放在java.nio包及子包下,并且对j…

超详细Netty入门,看这篇就够了!

思维导图 前言 本文主要讲述Netty框架的一些特性以及重要组件,希望看完之后能对Netty框架有一个比较直观的感受,希望能帮助读者快速入门Netty,减少一些弯路。 一、Netty概述 官方的介绍: Netty is an asynchronous event-drive…

SPI通信协议详解(一)

SPI是一个同步的数据总线,也就是说它是用单独的数据线和一个单独的时钟信号来保证发送端和接收端的完美同步。 时钟是一个振荡信号,它告诉接收端在确切的时机对数据线上的信号进行采样。 产生时钟的一侧称为主机,另一侧称为从机。总是只有一个…

SPI协议的介绍

学习内容: 学习SPI协议记录 学习清单: 提示:这里可以添加要学的内容 例如: SPI协议的介绍三根线还是四根线两个概念四种模式SPI时序图SPI优缺点SPI和IIC的对比 学习详细内容: 1.SPI协议的介绍 SPI是串口外设接口…

SPI 通信协议

文章目录 【 1. 概述 】【 2. 原理 】1. 全双工特征下的传输特点2. 二线式、三线式的SPI3. SPI 模式CPOL(Clock Polarity),时钟极性CPHA (Clock Phase),时钟相位通信模式_时序 4. 通信过程5. 底层数据传输演示 【 3. SPI底层驱动 】 【 1. 概述 】 SPI …

SPI通信协议基础

文章目录 引言正文串行与并行通信SPI通信简介SPI如何运作?时钟从机选择多个从机MOSI和MISOSPI数据传输步骤 SPI的优缺点优点缺点 好文推荐参考 引言 当您将微控制器连接到传感器,显示器或其他模块时,您是否考虑过这两种设备如何相互通信&…

SPI、I2C、UART(即串口)三种串行总线详解

以下内容均来源于网络资源的学习与整理,如有侵权请告知删除。 参考博客 几个串口协议学习整理 UART IIC SPI_mainn的博客-CSDN博客 SPI、I2C、UART三种串行总线的原理、区别及应用_嵌入式Linux,的博客-CSDN博客 RS-232 和 UART 之间有什么区别? - 知乎…

uart、spi、i2c通信协议详解

文章目录 前言一、uart(串口)介绍使用rs232、rs485拓展 二、I2C介绍1.宏观流程2.时序上3.典型操作 三、spi(串行外设接口)介绍使用1.宏观上2.微观上 总结1.i2c和spi对比 前言 之前对于各种通信协议学习了就忘,学了就忘…

普通GPIO模拟SPI通信协议(软件SPI)

在工作中偶尔会遇到SPI不够用的情况,而我们又要去使用SPI通信协议,此时就需要我们自己去模拟SPI通信协议。我们知道SPI通信协议有四种模式,它们分别如下所示: 下面是我基于ATSAM4SD16B芯片在Atmel Studio上用普通GPIO模拟的SPI…

SPI 协议

一. 概念 1. 通常SPI通信要求4根线,分别是MOSI(mast output salve input), MISO, CLK, CS。 2. 当发送和接受数据的工作都准备好了,只要有时钟CLK,就发送数据,没有时钟就不发送,而且一个时钟周期发送一位(bit)数据,所…

SPI通信协议(SPI总线)学习

转载自:https://www.cnblogs.com/deng-tao/p/6004280.html 1、什么是SPI? SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一 种同步串行接口技术,是一种高速的,全双工,同步的通信总…

SPI通信

1 SPI的简介及基本特点 1 SPI的简单介绍 最近工作中使用了SPI通信方式来做TM4C129和STM32之间的通信,为了更好地解决问题就学习了SPI原理的相关内容,完成了项目之后,也对这种通信方式有了较为深入的了解,现在来对SPI的使用方法进…