3.6.1.非阻塞IO
本节讲解什么是非阻塞IO,如何将文件描述符修改为非阻塞式
3.6.1.1、阻塞与非阻塞
(1)阻塞是指函数调用会被阻塞。本质是当前进程调用了函数,进入内核里面去后,因为当前进程的执行条件不满足,内核无法里面完成操作,就挂起这个进程,去执行其他进程。默认使用阻塞IO
(2)非阻塞IO当条件不满足时直接停止当前操作,退出程序(?)。或者非阻塞IO条件不满足时会一直占用CPU资源
(3)结合程序状态转换图一起理解
3.6.1.2、为什么有阻塞式
(1)常见的阻塞:wait、pause、sleep等函数;read或write某些文件时
wait等待回收子进程:当子进程没死,父进程就不能回收子进程,内核就阻塞住父进程,知道子进程死去称为僵尸进程,这时内核就会发一个信号给父进程,父进程就会被唤醒,去回收子进程。
(2)阻塞式的好处
非常有利于OS的性能发挥。阻塞时不会占用CPU,CPU可以去执行其他。
3.6.1.3、非阻塞
(1)为什么要实现非阻塞
(2)如何实现非阻塞IO访问:O_NONBLOCK和fcntl
a -- 阻塞
阻塞操作是指在执行设备操作时,若不能获得资源,则挂起进程知道满足可操作的条件后再进行操作;被挂起的进程进入休眠状态(放弃CPU),被从调度器的运行队列移走,直到等待的条件被满足;
b -- 非阻塞
非阻塞的进程在不能进行设备操作时,并不挂起(继续占用CPU),它或者放弃,或者不停地查询,直到可以操作为止;
二者的区别可以看应用程序的调用是否立即返回!
驱动程序通常需要提供这样的能力:当应用程序进行 read()、write() 等系统调用时,若设备的资源不能获取,而用户又希望以阻塞的方式访问设备,驱动程序应在设备驱动的xxx_read()、xxx_write() 等操作中将进程阻塞直到资源可以获取,此后,应用程序的 read()、write() 才返回,整个过程仍然进行了正确的设备 访问,用户并没感知到;若用户以非阻塞的方式访问设备文件,则当设备资源不可获取时,设备驱动的 xxx_read()、xxx_write() 等操作立刻返回, read()、write() 等系统调用也随即被返回。因为阻塞的进程会进入休眠状态,因此,必须确保有一个地方能够唤醒休眠的进程,否则,进程就真的挂了。唤醒进程的地方最大可能发生在中断里面,因为硬件资源获得的同时往往伴随着一个中断。阻塞I/O通常由等待队列来实现,而非阻塞I/O由轮询来实现。
转载于:https://www.cnblogs.com/Ocean-Star/p/9245364.html
3.6.1.非阻塞IO相关推荐
- Redis 笔记(12)— 单线程架构(非阻塞 IO、多路复用)和多个异步线程
Redis 使用了单线程架构.非阻塞 I/O .多路复用模型来实现高性能的内存数据库服务.Redis 是单线程的.那么为什么说是单线程呢? Redis 在 Reactor 模型内开发了事件处理器,这个 ...
- 【网络编程】同步IO、异步IO、阻塞IO、非阻塞IO
IO分两阶段: 1.数据准备阶段:在该阶段,根据是否等待数据准备,将IO分成阻塞和非阻塞: 2.内核空间复制回用户进程缓冲区阶段:在该阶段,只要程序需要等待复制完成,才能往下运行(尽管这个时间很短), ...
- Linux非阻塞IO(二)网络编程中非阻塞IO与IO复用模型结合
上文描述了最简易的非阻塞IO,采用的是轮询的方式,这节我们使用IO复用模型. 阻塞IO 过去我们使用IO复用与阻塞IO结合的时候,IO复用模型起到的作用是并发监听多个fd. 以简单的回射服务器为例,我 ...
- 阻塞io阻塞io_Redis:RESP协议,阻塞IO 与非阻塞IO,Redis的线程模型
1.Redis 阻塞IO 与非阻塞IO Java在JDK1.4 中引入了NIO ,但是也有很多人在使用阻塞IO,这两种IO有什么区别? 在阻塞模式下,如果你从数据流读取不到指定大小的数据量,IO就会阻 ...
- python3 异步 非阻塞 IO多路复用 select poll epoll 使用
有许多封装好的异步非阻塞IO多路复用框架,底层在linux基于最新的epoll实现,为了更好的使用,了解其底层原理还是有必要的. 下面记录下分别基于Select/Poll/Epoll的echo ser ...
- 实例浅析epoll的水平触发和边缘触发,以及边缘触发为什么要使用非阻塞IO
一.基本概念 我们通俗一点讲: Level_triggered(水平触发):当被监控的文件描述符上有可读写事件发生时,epoll_wait()会通知处理程序去读写.如果这次没有把数据一次性全部读写完( ...
- struct用法_精讲响应式webclient第1篇-响应式非阻塞IO与基础用法
笔者在之前已经写了一系列的关于RestTemplate的文章,如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层HT ...
- 网络传输中的两个阶段、阻塞IO、非阻塞IO和多路复用
今天学习了网络传输中的两个阶段.阻塞IO.非阻塞IO和多路复用 一.网络传输中的两个阶段 分别是 waitdata 和 copydata send就是copydata recv是waitdata和co ...
- IO模型之非阻塞IO
1. IO模型非阻塞 IO Linux下,可以通过设置socket使其变为 non-blocking.当对一个non-blocking socket执行读操作时,流程是这个样子: 从图中可以看出,当用 ...
- 【多线程】0.理解一下5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO
5种IO模型.阻塞IO和非阻塞IO.同步IO和异步IO 看了一些文章,发现有很多不同的理解,可能是因为大家入切的角度.环境不一样.所以,我们先说明基本的IO操作及环境. 本文是在<UNIX网络编 ...
最新文章
- php 使用table方式导出excel文件
- 高斯消元法解方程matlab程序,用高斯消元法解线性方程组 的MATLAB程序
- 解决:阿里云ECS服务器 远程连接不上、极慢 (主机监控的实现)
- 分布式锁的几种实现方式~
- 关于分辨率和地图打印的一些问题
- 福一中招聘计算机教师,2017福建福州一中招聘拟聘公示
- sas数据集怎么导出_SAS数据集转Stata
- 怎么把一台手机的便签转移到另一台手机上?
- 高性能计算专业应用软件大观
- 物流设施布局方法——CRAFT
- 胡灵 c语言,清华作业们男女主角现身
- u盘在电脑读不出来,但别的可以读,别的u盘在我电脑又可以识别怎么回事?...
- Unity API通读 CustomEditor
- 关于单相变频电源及变频电路部分介绍
- android 摄像头画面竖,OpenCV for Android(5):竖屏摄像头旋转问题
- ONVIF系列笔记-设备发现机制
- 我的世界中国版服务器账号封了,我的世界免费永久服务器
- SQl 固定日期 年、月、日(加,减 1)
- 湫湫系列故事——减肥记I(HDU-4808)
- 01336软件项目管理考试大纲
热门文章
- java中io.nio.aio_Java中网络IO的实现方式-BIO、NIO、AIO
- linux强制用户改密码,如何在Linux中强制用户在下次登录时更改密码?
- php发邮箱验证码找回密码,织梦dede会员通过邮箱找回密码方法
- html5中音乐播放器怎么写,打造属于自己的音乐播放器 HTML5之audio标签
- linux 安装ftp下载,LINUX FTP安装与配置
- linux7系统如何配置网卡,Linux 7 配置网卡(nmcli)
- 玩cf出现outofmemory_CF画质粗糙平衡感人,却能历经十年经久不衰,靠的是什么?...
- 洛谷P1014 [NOIP1999 普及组] Cantor 表
- 微博 Android 启动广告,使用Xposed去除微博国际版的启动广告
- mysql 5.6密钥_MySQL的密钥文件不正确