目录

一、概念

二、操作流程

三、使用场景


一、概念

NIO(非阻塞IO模型)NIO即Non-Blocking IO,是非阻塞IO模型。概念限定范围:通过系统api获取数据。

也就是说调用系统api获取数据后,会立刻返回结果,程序不会阻塞等待数据。 根据返回的结果判断是否继续重复调用系统api获取数据。

二、操作流程

该模式下应用进程会以较高频率调用系统api进行数据获取,也就是说进程与内核会出现较多交互(进程用户态与内核态相互切换),直到获取到数据为止。

要注意的是,当内核数据准备好后,数据是需要由内核空间复制到用户的存储空间,这个复制数据的过程是阻塞的(也就是说,当数据特别大时,这个复制也会比较长时间,进程在这段时间内是不能立刻返回,需要等数据复制完成了返回结果)。

三、使用场景

一般将socket设置为NONBLOCK,然后启多个线程,每个线程轮询检测不同的socket,来达到处理多个socket的效果。一般socket比较少时,通过多线程也是不错的选择。

IO模型-非阻塞IO模型相关推荐

  1. 阻塞io阻塞io_Redis:RESP协议,阻塞IO 与非阻塞IO,Redis的线程模型

    1.Redis 阻塞IO 与非阻塞IO Java在JDK1.4 中引入了NIO ,但是也有很多人在使用阻塞IO,这两种IO有什么区别? 在阻塞模式下,如果你从数据流读取不到指定大小的数据量,IO就会阻 ...

  2. 【多线程】0.理解一下5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO

    5种IO模型.阻塞IO和非阻塞IO.同步IO和异步IO 看了一些文章,发现有很多不同的理解,可能是因为大家入切的角度.环境不一样.所以,我们先说明基本的IO操作及环境. 本文是在<UNIX网络编 ...

  3. Linux网络编程 | IO模型 :阻塞IO、非阻塞IO、信号驱动IO、异步IO、多路复用IO

    目录 IO模型 阻塞与非阻塞 同步与异步 阻塞IO 非阻塞IO 信号驱动IO 多路复用IO 异步IO IO模型 根据各自的特性不同,IO模型被分为阻塞IO.非阻塞IO.信号驱动IO.异步IO.多路复用 ...

  4. 5种网络IO模型:阻塞IO、非阻塞IO、异步IO、多路复用IO、信号驱动IO

    目录 前言 阻塞IO(blocking IO) 非阻塞IO(non-blocking IO) 多路复用IO(IO multiplexing) 异步IO(Asynchronous I/O) 模型间的区别 ...

  5. IO模型 :阻塞IO、非阻塞IO、信号驱动IO、异步IO、多路复用IO

    文章目录 IO模型 阻塞IO 非阻塞IO 信号驱动IO 多路复用IO 异步IO IO模型 根据各自的特性不同,IO模型被分为阻塞IO.非阻塞IO.信号驱动IO.异步IO.多路复用IO五类. 最主要的两 ...

  6. 5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO

    5种IO模型.阻塞IO和非阻塞IO.同步IO和异步IO 看了一些文章,发现有很多不同的理解,可能是因为大家入切的角度.环境不一样.所以,我们先说明基本的IO操作及环境.本文是在<UNIX网络编程 ...

  7. 网络传输中的两个阶段、阻塞IO、非阻塞IO和多路复用

    今天学习了网络传输中的两个阶段.阻塞IO.非阻塞IO和多路复用 一.网络传输中的两个阶段 分别是 waitdata 和 copydata send就是copydata recv是waitdata和co ...

  8. 同步IO、异步IO、阻塞IO、非阻塞IO、复用IO

    参考:同步IO 异步IO 作者:今天天气眞好 发布时间: 2021-04-19 09:42:29 网址:https://blog.csdn.net/qq_51118175/article/detail ...

  9. 计算机网络——阻塞IO、非阻塞IO、IO多路复用

    1 简介   网络IO模型有5种:阻塞IO.非阻塞IO.IO多路复用.信号驱动IO.异步IO   本文仅对阻塞IO.非阻塞IO.IO多路复用进行讲解   在网络通信中,对数据进行收发在发送端和接收端的 ...

  10. 阻塞IO、非阻塞IO、以及多路复用原理

    阻塞IO.非阻塞IO.以及多路复用原理 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 阻塞IO.非阻塞IO.以及多路复用原理 什么是I/O 一.BIO(阻塞IO) 二.N ...

最新文章

  1. 如何理解 Web API
  2. iOS应用数据持久化(一)
  3. wordpress 模板中的链接_WordPress 官方AMP插件已更新至2.0版
  4. easyExcel 读取日期为数字的解决方案
  5. 解决无法删除表,提示被外键约束引用
  6. linux脚本计时,Linux用脚本实现“时分秒“倒计时功能
  7. HTML一个form表单中有两个(多个)submit,后台如何区分(纯HTML实现,无需javascript)
  8. 《Python Cookbook 3rd》笔记(3.8):分数运算
  9. 十六进制取反_技 术 | 你不知道的Java——04.十六进制
  10. 影响搜索引擎收录网站内容的四大原因分析
  11. CSS3属性选择器(CSS3)
  12. ANT的安装/配置笔记
  13. ES6学习:Map结构的目的和基本用法
  14. 扫雷算法实现(简易版,只能在CMD指令中玩)
  15. php中的m方法的区别吗,php中的M方法
  16. 安卓直播间websocket协议破解还原
  17. Git自学之路(二)- Git初始配置和基本使用
  18. C语言随机比大小循环,C语言基础知识之(三):循环、随机数
  19. C++ 实现tring字符串trim函数和split函数
  20. Tomcat7源码解析

热门文章

  1. Docker镜像推送阿里云和私有库
  2. 为什么用Python开发桌面应用程序
  3. Android build.gradle配置文件
  4. 【人体姿态追踪】Pose Flow: Efficient Online Pose Tracking 【解读】
  5. Android IT新闻阅读器与手机二维码
  6. mysql 连表查询_mysql数据库之联表查询
  7. MyBatis Plus 联表查询
  8. gearman mysql_gearman、gearman-mysql-udf安装
  9. linux 脚本 ll命令,linux中ll命令的详细解释
  10. 数据分析一、 pandas库基础知识