Linux下文件的堵塞与非堵塞对部分系统调用的影响
1.基本概念
所谓的堵塞,即内核在对文件操作I/O系统调用时。假设条件不满足(可能须要产生I/O),则内核会将该进程挂起。非堵塞则是发现条件不满足就会马上返回。
此外须要注意的是非堵塞并非轮询。不然就和堵塞没多大差别了,它仅仅是调用不成功就直接返回了,不会在去看啥时候会满足条件。而是有你自己去选择接下来该咋办,系统以不再负责
2.read/write堵塞与非堵塞的理解
read/write系统调用,并不会去直接读写文件。而仅仅是去操作文件所相应的内存页(此时的页为虚拟内存),对于read假设在页中找到了想要读写的数据,则直接从页中将数据copy到用户缓存就可以,假设要读的页没有找到,则仅仅能从磁盘读出该页内容缓存在内存中就可以。所谓的读过程,事实上文件系统所要做的仅仅是锁定页面,然后构造一个读请求,并将请求发给底层的IO子系统就可以。
linux内核中read系统调用默认是堵塞的write调用是非堵塞的,由于write时仅仅是将用户态的数据写入缓存页面中就可以返回
3.对于网络套接字堵塞/非堵塞对读数据的影响
(1)在堵塞情况下
在堵塞条件下,read/recv/msgrcv的行为
1.假设没有发现数据在网络缓冲中会一直等
2.当发现有数据时会把数据读到用户指定的缓存区中(假设读到的数据比指定的大小小,read此时并不会堵塞。而是会马上返回)
应为read的原则是在不超过指定长度的时候有多少读多少。没有数据就返回。所以普通情况下。假设我们想要读取我们想要的字节量,就得循环read
(2)在非堵塞情况下
在非堵塞情况下read的行为
1.假设发现没有数据就直接返回
2.假设发现有数据,那么也是採用有多少就读多少,所以read完之后须要推断是否再次进行read操作。以读到我们想要的字节数
对于读的堵塞与非堵塞差别就在于没有数据可读时,是否马上返回
4.对于网络套接字堵塞/非堵塞对写数据的影响
写的操作本质也不是进行发送操作。而是把用户态的数据copy到系统底层去,然后由系统帮忙发送。
send,write返回成功,仅仅表明数据已经copy究竟层缓冲,而并不表明数据以发送出去。更不能表示对方port已经接收到数据
(1)堵塞情况下
write会将数据发完之后才返回。这里与读不同。当我们读数据的时候,我们并不知道发送端是否还有数据要发,假设一直等待就可能造成死循环,所以为了避免这类事情发生,我们把当前缓存中的内容读完,就返回了。并不关心是否读够了我们想要读的字节数。而write。由于须要写的长度是知道的。所以它会一直写够指定的字节才返回
(2)非堵塞情况下
非堵塞情况下,是採用能够写多少就写多少的策略。与读不一样的地方在于,有多少读多少是由网络发送端是否有传输数据到为标准。
可是对于写多少是由本地网络堵塞情况为标准的,对于非堵塞的情况就是一次写多少算多少,有可能会造成部分写入
Linux下文件的堵塞与非堵塞对部分系统调用的影响的更多相关文章
- 网络编程----堵塞、非堵塞和同步、异步IO
我是学渣.但我想进步. 本文是面试我的牛人问我的.你知道什么是堵塞.非堵塞和同步.异步IO么?自觉得是分布式系统程序猿的我居然不知道.学习吧. 首先介绍堵塞IO和非堵塞IO: 堵塞IO:是指说程序等待 ...
- IO模式——同步(堵塞、非堵塞)、异步
为什么IO模式非常重要?由于现代的计算机和操作系统的架构决定了CPU是稀缺资源,大家都要来一起竞争.而IO(特别是网络相关的IO)的速度往往较慢.所以怎样进行IO就有了多种模式,包含同步.异步.堵塞. ...
- linux下文件的复制、移动与删除
linux下文件的复制.移动与删除命令为:cp,mv,rm 一.文件复制命令cp 命令格式:cp [-adfilprsu] 源文件(source) 目标文件(destination) ...
- Linux下文件的权限
一.Linux下查看文件属性 命令为: [root@localhost ~]# ls -al 结果: ls是『list』的意思,重点在显示文件的文件名与相关属性.而选项『-al』则表示列出所有的文件详 ...
- Windows与Linux下文件操作监控的实现
一.需求分析: 随着渲染业务的不断进行,数据传输渐渐成为影响业务时间最大的因素.究其原因就是因为数据传输耗费较长的时间.于是,依托于渲染业务的网盘开发逐渐成为迫切需要解决的需求.该网盘的实现和当前市场 ...
- 学习笔记12—linux下文件的复制、移动与删除
查看centOS 版本 cat /etc/redhat-release 1,复制粘贴文件 cp [选项] 源文件或目录 目标文件或目录 2,剪切粘贴文件 mv [选项] 源文件或目录 ...
- 高级字符驱动之堵塞与非堵塞IO
/** *此实例涉及到线程的挂起与竞态,字符IO的堵塞与非堵塞 */ struct scull_pipe { wait_queue_head_t inp, outp; char *buffer, *e ...
- Linux下文件的三种时间戳
Linux下文件的三种时间标记 三种时间对应关系表 column column column 访问时间 Access atime 修改时间 Modify mtime 状态改动时间 Change cti ...
- linux下文件结束符
linux下文件结束符,我试过了所有的linux,发现其文件的结束符都是以0a即LF结束的,这个是操作系统规定的,windows下是\r\n符结束,希望可以帮助大家. -------------转:来 ...
随机推荐
- Java里如何判断一个String是空字符串或空格组成的字符串
要判读String是否为空字符串,比较简单,只要判断该String的length是否为0就可以,或者直接用方法isEmpty()来判断. 但很多时候我们也会把由一些不可见的字符组成的String也 ...
- FIREDAC驱动MYSQL数据库
FIREDAC驱动MYSQL数据库 FIREDAC连接MYSQL数据库需要用到LIBMYSQL.DLL这个动态库. 这个LIBMYSQL.DLL分为32位和64位两个不同的版本,对应32位或64位的M ...
- 直方图均衡(HE)与局部色调映射(LTM) .
直方图均衡(Histogram Equalization)是图像处理中一个十分基础的概念,具有调整图像灰度,增强对比度的作用. 限制对比度自适应直方图均衡(Contrast Limited Ad ...
- Tomcat Deployment failure ,locked one or more files
在用Eclipse+Tomcat配置J2EE项目时,出现如下提示错误: Undeployment Failure could not be redeployed because it could no ...
- ElasticSearch文档
1.什么是文档? 程序中大多的实体或对象能够被序列化为包含键值对的JSON对象,键(key)是字段(field)或属性(property)的名字,值(value)可以是字符串.数字.布尔类型.另一个对 ...
- 通过脚本发送zabbix邮件报警
zabbix原生的报警媒介类型中,邮件报警是我们常用的方式.当我们在CentOS6上面安装zabbix3.0并配置邮件报警的时候,在邮件配置正确的前提下,不管触发器如何触发,邮件总是发送不出去,但是在 ...
- 2017.7.18 linux下用户、组和文件的操作
参考来自:<鸟叔的linux私房菜(基础学习篇)-第14章> 0 目的 在linux下搭建ELK环境时,因为elasticsearch不能在root下操作,所以要为其新增一个用户,以及随之 ...
- [PWA] Cache Third Party Resources from a CDN in a React PWA
Our service worker caches our static assets - but only those assets that are included in our React A ...
- 【读书笔记】【深入理解ES6】#1-块级作用域绑定
var声明及变量提升(Hoisting)机制 在函数作用域或全局作用域中通过var关键字声明的变量,无论实际上是在哪里声明的,都会被当成在当前作用域顶部声明的变量.这就是我们常说的提升(Hoistin ...
- datatables插件适用示例
本文共四部分:官网 | 基本使用|遇到的问题|属性表 一:官方网站:[http://www.datatables.NET/] 二:基本使用:[http://www.guoxk.com/node/jQu ...