栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Netty之四种常用 IO 模型

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Netty之四种常用 IO 模型

四种常用 IO 模型: 同步阻塞 BIO: 最简单的 IO 模型,用户线程在读写时被阻塞.

数据拷贝指请求到的数据先存放在内核空间, 然后从内核空间拷贝至程序的缓冲区.

用户线程在 IO 过程中被阻塞,不能做任何事情,对 CPU 的资源利用率不高.

同步非阻塞 NIO: 用户线程不断发起 IO 请求. 数据未到达时系统返回一状态值; 数据到达后才真正读取数据.

用户线程每次请求 IO 都可以立即返回,但是为了拿到数据,需不断轮询,无谓地消耗了大

量的 CPU. 一般很少直接使用这种模型,而是在其他 IO 模型中使用非阻塞 IO 这一特性

IO 多路复用: IO 多路复用建立在内核提供的阻塞函数 select 上,用户先将需要进行 IO 操作的 socket 添加到 select 中,然后等待阻塞函数 select 返回。当数据到达后,socket 被激活,select 返回,用户线程就能接着发起 read 请求。

实际上, 我们可以给 select 注册多个 socket, 然后不断调用 select 读取被激活的 socket,实现在同一线程内同时处理多个 IO 请求的效果. 更进一步, 我们把 select 轮询抽出来放在一个线程里, 用户线程向其注册相关 socket 或 IO请求,等到数据到达时通知用户线程,则可以提高用户线程的 CPU 利用率. 这样, 便实现了用户数据读写的异步方式.

IO 多路复用是最常使用的 IO 模型,因其轮询 select 的线程会被阻塞, 异步程度还不够“彻
底”, 所以常被称为异步阻塞 IO

异步 AIO: 真正的异步 IO 需要操作系统更强的支持。IO 多路复用模型中,数据到达内核后通知用户线程,用户线程负责从内核空间拷贝数据;而在异步 IO 模型中,当用户线程收到通知时,数据已经被操作系统从内核拷贝到用户指定的缓冲区内,用户线程直接使用即可。

相比于 IO 多路复用,异步 IO 并不常用,因为目前操作系统对异步 IO 的支持并不完善,IO多路复用也基本够用. 有很多做法是用 IO 多路复用模型模拟异步 IO(IO 事件触发时不直接通知用户线程,而是将数据读写完毕后放到用户指定的缓冲区中)。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/328187.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号