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

相关推荐
攒了一袋星辰1 小时前
Spring是如何实现scope作用域支持
java·后端·spring
小黑屋说YYDS1 小时前
Spring Validation校验
java·后端·spring
接着奏乐接着舞1 小时前
spring boot 注解 @bean
spring boot·后端·python
fashia2 小时前
Java转Go日记(四十四):Sql构建
开发语言·后端·golang·go
程序员Bears3 小时前
Flask项目实践:构建功能完善的博客系统(含评论与标签功能)
后端·python·flask
弥鸿3 小时前
RestFul操作ElasticSearch:索引与文档全攻略
后端·elasticsearch·restful
blues_C3 小时前
二、【环境搭建篇】:Django 和 Vue3 开发环境准备
后端·python·django·vue3·测试平台
Murphy_lx4 小时前
django回忆录(Python的一些基本概念, pycharm和Anaconda的配置, 以及配合MySQL实现基础功能, 适合初学者了解)
后端·python·pycharm·django
HelloRevit5 小时前
asp.net core api RESTful 风格控制器
后端·asp.net·restful
JAVA学习通5 小时前
[SpringBoot]Spring MVC(6.0)----图书管理系统(初)
spring boot·后端·spring