写点什么

如何理解网络 IO 模型

作者:Dinfan
  • 2023-03-17
    广东
  • 本文字数:889 字

    阅读完需:约 3 分钟

从组成部分反过来理解网络模型

(如果不清楚 IO 模型可以先参考最下方的第一个链接进行了解,或自行搜索)

一、组成部分

在进入常见模型之前,我们先分析一下网络 IO 模型的大致组成部分。

第一部分:建立连接。

第二部分:读取与发送数据。(读取数据后,接着进入第三部分业务处理,然后再返回此处进行发送数据)

第三部分:业务处理。

二、常见模型

我们可以从上面这 3 个部分,反过来理解常见的 IO 模型/网络 IO 模型

1、BIO

单线程模型,这 3 个部分都由同一个进程或者线程负责。而且每个连接都需要新建立一个线程处理。

2、NIO

IO 多路复用模型,由单个线程负责接收并建立所有连接(当一个连接正在被处理时,其他连接请求会被阻塞并等待),然后由单/多线程处理第二和第三部分。NIO 重点在于如何处理第一部分。(可以参考最下方的链接进一步了解。)

3、Reactor 模型

3.1、单 Reactor 单线程模型,属于 NIO 的一种实现。此时,进入第一、第二、第三部分的同一个请求处于同一线程。需要完成前一个请求的所有过程才能进入下一个请求。

3.2、单 Reactor 多线程模型,属于 NIO 的一种实现。此时,reactor 线程负责按顺序处理请求的第一和第二部分,进入第一和第二部分的请求处于同一线程。第三部分则使用线程池中的其他线程进行处理。

3.3、多 Reactor 多线程模型,属于 NIO 的一种。此时主 reactor 线程负责处理第一部分,然后分发给子 reactor 中的多个线程处理第二部分。第三部分则使用线程池中的其他线程进行处理。

这 3 种 Reactor 模型的性能依次提升,但复杂度也是随之提升。所以应该根据系统的需要去选择,避免盲目选择性能最高的模型,导致系统复杂度迅速上升。

深入学习:其实 Reactor 模型中的每一个 reactor 都是一个事件循环组,一个组中可以有多个事件循环。每个事件循环的每次循环依次处理监听事件和任务队列。可以通过搜索 Netty 中 Reactor 模型的实现,和 Netty 的具体使用方式加深理解。(可以参考最下方的链接进一步了解。)


IO 模型参考链接:

https://juejin.cn/post/7070139350574432270

Netty 与 Reactor 模型实现参考链接:

https://juejin.cn/post/7070139350574432270(同上)

https://www.modb.pro/db/129749

netty、reactor与事件循环

netty事件循环和异步调用

发布于: 刚刚阅读数: 3
用户头像

Dinfan

关注

还未添加个人签名 2018-03-21 加入

还未添加个人简介

评论

发布
暂无评论
如何理解网络IO模型_事件循环_Dinfan_InfoQ写作社区