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

相关推荐
Tony Bai2 小时前
“我曾想付钱给 Google 去工作”—— Russ Cox 深度访谈:Go 的诞生、演进与未来
开发语言·后端·golang
serendipity_hky3 小时前
【SpringCloud | 第2篇】OpenFeign远程调用
java·后端·spring·spring cloud·openfeign
嘟嘟MD3 小时前
程序员副业 | 2025年11月复盘
后端·创业
SadSunset3 小时前
(15)抽象工厂模式(了解)
java·笔记·后端·spring·抽象工厂模式
汝生淮南吾在北3 小时前
SpringBoot+Vue养老院管理系统
vue.js·spring boot·后端·毕业设计·毕设
李慕婉学姐4 小时前
【开题答辩过程】以《基于springboot的地铁综合服务管理系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·spring boot·后端
期待のcode4 小时前
Springboot配置属性绑定
java·spring boot·后端
海上彼尚4 小时前
Go之路 - 6.go的指针
开发语言·后端·golang
LYFlied5 小时前
在AI时代,前端开发者如何构建全栈开发视野与核心竞争力
前端·人工智能·后端·ai·全栈
用户47949283569155 小时前
我只是给Typescript提个 typo PR,为什么还要签协议?
前端·后端·开源