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

相关推荐
IT_陈寒4 小时前
Python多进程共享变量那个坑,我差点没爬出来
前端·人工智能·后端
码事漫谈4 小时前
2026软考高级·系统架构设计师备考指南
后端
AI茶水间管理员5 小时前
如何让LLM稳定输出 JSON 格式结果?
前端·人工智能·后端
其实是白羊6 小时前
我用 Vibe Coding 搓了一个 IDEA 插件,复制URI 再也不用手动拼了
后端·intellij idea
用户8356290780516 小时前
Python 操作 Word 文档节与页面设置
后端·python
酒後少女的夢6 小时前
设计模式教程
后端·架构
凌览6 小时前
别再手搓 Skill 了,用这个工具 5 分钟搞定
前端·后端
weixin_408099677 小时前
python请求文字识别ocr api
开发语言·人工智能·后端·python·ocr·api·ocr文字识别
weixin_408099677 小时前
【组合实战】OCR + 图片去水印 API:自动清洗图片再识别文字(完整方案 + 代码示例)
图像处理·后端·ocr·api·文字识别·去水印·ocr识别优化