IO流
本文最后更新于85 天前,其中的信息可能已经过时,如有错误请发送邮件到3082654005@qq.com

BIO、NIO、AIO 的核心区别

维度BIO(阻塞 I/O)NIO(非阻塞 I/O)AIO(异步 I/O)
阻塞方式同步阻塞:线程需全程等待 I/O 完成,期间无法做其他事。同步非阻塞:线程无需等待,但需主动轮询 I/O 状态(通过 Selector)。异步非阻塞:线程无需等待 / 轮询,操作系统完成后主动通知(回调 / Future)。
线程参与阶段线程参与 I/O 的 “等待 + 数据处理” 全过程。线程参与 “轮询 I/O 状态” 和 “数据处理” 两个阶段。线程仅参与 “数据处理” 阶段,I/O 的 “等待 + 执行” 由操作系统完成。
并发模型一连接一线程,并发量低。多路复用,一线程管理多连接,并发量高。异步通知,一线程可处理更多连接,并发量更高(理论上)。
适用场景低并发、简单场景(如本地文件读写)。高并发、小数据量、I/O 频繁(如即时通讯、服务器)。低并发、大数据量、I/O 耗时较长(如大文件传输、远程请求)。
复杂度API 简单直观,开发成本低。需手动管理 Selector、Buffer,逻辑较复杂(如 Netty 封装后简化)。无需管理轮询,代码更简洁,但底层依赖操作系统支持(如 Linux 对 AIO 支持有限)。
维度同步 IO异步 IO
等待方式程序主动等待 IO 完成,期间无法做事程序不等待,IO 在后台执行,完成后通知
CPU 利用率低(等待时 CPU 可能空闲)高(等待时 CPU 可执行其他任务)
代码复杂度简单(顺序执行)较高(需处理回调 / 通知)
维度阻塞 IO非阻塞 IO
IO 未就绪时的状态进程 / 线程被挂起,无法执行任何任务进程 / 线程不阻塞,可继续执行其他任务
CPU 利用率低(阻塞时 CPU 可分配给其他进程)可能较高(轮询会消耗 CPU 资源)
代码复杂度简单(顺序执行,无需处理 “未就绪” 状态)较高(需轮询检查,处理 “未就绪” 分支)
适用场景低并发、IO 操作快的场景(如本地文件读取)高并发、IO 操作慢的场景(如网络通信)
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇