Netty详解(一)IO基本概念

1. 阻塞与非阻塞

阻塞 IO:阻塞 IO 是指调用结果返回之前,当前线程会被挂起,调用线程只有在得到结果之后才会返回

非阻塞 IO:非阻塞 IO 是指在不能立刻得到结果之前,该调用不会阻塞当前线程

2. 同步和异步

同步和异步是指访问数据的一种机制

同步请求

  • 同步I/O操作是指在执行I/O操作时,程序必须等待操作完成才能继续执行。在同步操作中,程序提交一个I/O请求后,操作系统会阻塞该程序,直到请求操作完成。此时,程序才能继续执行后续的代码。因此,同步操作会导致程序执行流程暂停,直至I/O操作完成。

异步请求

  • 异步I/O操作是指程序在发起I/O请求后,无需等待操作完成,可以继续执行其他任务。当异步I/O操作完成时,程序会通过某种方式(如回调函数、事件通知、信号等)得到通知。因此,异步操作使程序执行流程得以继续,而不必等待I/O操作完成。

3. BIO 和 NIO

BIO

  • BIO 就是传统的 java.io 包,它是基于流模型实现的,交互的方式是同步、阻塞方式,也就是 说在读入输入流或者输出流时,在读写动作完成之前,线程会一直阻塞在那里,它们之间的调 用时可靠的线性顺序。它的有点就是代码比较简单、直观;缺点就是 IO 的效率和扩展性很 低,容易成为应用性能瓶颈。

BIO 的 Server 的通讯模型

NIO

  • NIO 是一种同步非阻塞的 I/O 模型,于 Java 1.4 中引入,对应 java.nio 包,提供了 Channel , Selector,Buffer 等抽象。NIO 中的 N 可以理解为 Non-blocking,不单纯是 New。它支持面向缓冲的,基于通道的 I/O 操作方法。 NIO 提供了与传统 BIO 模型中的 Socket 和 ServerSocket 相对应的 SocketChannel 和 ServerSocketChannel 两种不同的套接字通道实现,两种通道都支持阻塞和非阻塞两种模式。对于高负载、高并发的(网络)应用,应使用 NIO 的非阻塞模式来开发

NIO 的 Server 的通讯模型

生活实例来进行理解

  • BIO:去吃饭发现全坐满了没有位置,这个时候就一直等着,主动观察那个位置空下来了,我就立刻去占位子
  • NIO:去吃饭发现全坐满了没有位置,这个时候我回去做别的事情,时不时去看看有没有位置,如果有就去占位子

4. Reactor 线程模型

单线程模型:所有的 IO 操作都由同一个 NIO 线程处理的

多线程模型:由一组 NIO 线程处理 IO 操作

主从线程模型:一组线程池接收请求,一组线程池处理 IO

相关推荐
qq_17448285758 小时前
springboot基于微信小程序的旧衣回收系统的设计与实现
spring boot·后端·微信小程序
锅包肉的九珍9 小时前
Scala的Array数组
开发语言·后端·scala
心仪悦悦9 小时前
Scala的Array(2)
开发语言·后端·scala
2401_882727579 小时前
BY组态-低代码web可视化组件
前端·后端·物联网·低代码·数学建模·前端框架
心仪悦悦9 小时前
Scala中的集合复习(1)
开发语言·后端·scala
代码小鑫10 小时前
A043-基于Spring Boot的秒杀系统设计与实现
java·开发语言·数据库·spring boot·后端·spring·毕业设计
真心喜欢你吖10 小时前
SpringBoot与MongoDB深度整合及应用案例
java·spring boot·后端·mongodb·spring
激流丶10 小时前
【Kafka 实战】Kafka 如何保证消息的顺序性?
java·后端·kafka
uzong11 小时前
一个 IDEA 老鸟的 DEBUG 私货之多线程调试
java·后端
飞升不如收破烂~12 小时前
Spring boot常用注解和作用
java·spring boot·后端