I/O简介
用户空间是常规进程所在区域。JVM就是常规进程,驻守于用户空间。用户空间是非特权区域,在该区域执行的代码不能直接访问硬件设备。
内核空间是操作系统所在区域。内核代码有特别的权利:它能与设备控制器通讯,控制着用户区域进程的运行状态等。所有I/O都直接或间接通过内核空间。
当进程请求I/O操作,它执行一个系统调用将控制权移交给内核。当内核以这种方式被调用,它随即采取任何必要的比州,找到进程所需数据,并把数据传送到用户空间内的指定缓冲区,内核试图对数据进行高速缓存或与读取,因此进程所需数据可能已经在内核空间李。若这样,该数据只需简单的拷贝出来即可。若数据不在内核空间,则进程被挂起,内核着手把数据读进内存。
阻塞式I/O
在Linux中,默认情况下所有的socket都是blocking,一个典型的读操作流程大概是:
1. 等待数据从网络中到达。当所有等待数据到达时,它被复制到内核中的某个缓冲区。
2. 把数据从内核缓冲区复制到应用程序缓冲区。
当用户进程调用了recvfrom这个系统调用,kernel就开始了IO的第一个阶段:准备数据。对于network io来说,很多时候数据在一开始没有到达,这时候kernel就要等待足够的数据到来。而在用户进程这边,这个进程会被阻塞。当kernel一直等到数据准备好了,它就会将数据从kernel中拷贝到用户内存,然后kernel返回结果,用户进程才会解除block的状态,重新运行起来。
非阻塞式I/O
Linux下,可以通过设置socket使其变成non-blocking,当对一个non-blocking socket执行操作时,流程如下
当用户进程发出read操作时,若kernel中的数据还没准备好,它并不会block用户进程,而是立刻返回一个error。从用户进程角度来讲,它发起了一个read操作后,并不需要等待,而是马上得到一个结果。用户进程判断结果是一个error时,它就知道数还没准备好,于是他可以再次发送read操作。一旦kernel中的数据准备好了,并且又再次受到了用户进程的system call,那么它马上就讲数据拷贝到了用户内存,然后返回。因此,用户进程的第一个阶段不是阻塞的,需要不断主动的询问kernel数据好了没,第二个阶段依然是阻塞的。
I/O多路复用
IO multiplexing,有事也称event driven IO,select/epoll的好处就是单个process可以同时处理多个网络连接的I/O。IO复用同阻塞IO本质一样,只不错利用了select系统调用,由内核来负责本来是请求进程该做的轮询操作。基本原理是select/epoll这个function会不断轮询负责所有socket,当某个socket有数据到达了,就通知用户进程。
当用户进程调用了select,那么整个进程会被block,而同时,kernel会“监视”所有select负责的socket,当任何一个socket中的数据准备好了,select就会返回。这个时候用户进程再调用read操作,将数据从kernel拷贝到用户进程。IO复用与非阻塞IO的流程差不多,而且还需要使用两个system call(select和recvfrom)。但select的优势在于它可以同事处理多个connection。若连接数不是很高的话,使用select/poll的web server不一定比使用multi-threading + blocking IO的web server性能更好,可能延迟还更大。
信号驱动式IO
异步I/O
工作机制是告知内核启动某个操作,并让内核在整个操作完成后通知我们。
用户进程发起read操作之后,立刻就可以开始去做其他事情。另一方面,从kernel的角度,当它受到一个asynchronous read之后,首先它会立刻返回,然后不会对用户进程产生任何block。kernel会等待数据准备完成,然后将数据拷贝到用户内存,当这一切都完成之后,kernel会给用户进程发送一个signal,告诉它read操作完成了。在整个过程中进程完全没有被block。
I/O简介的更多相关文章
- ASP.NET Core 1.1 简介
ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...
- MVVM模式和在WPF中的实现(一)MVVM模式简介
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
- REST简介
一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...
- Microservice架构模式简介
在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...
- const,static,extern 简介
const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...
- HTTPS简介
一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...
- 【Machine Learning】机器学习及其基础概念简介
机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- Cesium简介以及离线部署运行
Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...
- 1.Hibernate简介
1.框架简介: 定义:基于java语言开发的一套ORM框架: 优点:a.方便开发; b.大大减少代码量; c.性能稍高(不能与数据库高手相比,较一般数据库使用者 ...
随机推荐
- Linux 系统TCP连接内存大小限制 调优
系统TCP连接内存大小限制 TCP的每一个连接请求,读写都需要占用系统内存资源,可根据系统配置,对TCP连接数,内存大小,限制调优. 查看系统内存资源 记录内存 详情:cat /proc/meminf ...
- dataguard从库删除归档的例子
deletearchlog.sh #!/bin/sh export PATH TABLE='v$archived_log' sqlplus -silent "/ as sysdba" ...
- freeswitch 获取当前网关通道数
1.使用show xmlstatus可以获取网关实时负载. 无session 有session
- C# 线程 正确使用Thread.Join()停止方式
/// <summary> /// 停下线程 /// </summary> private void MyStopTask() ...
- [ajax] - 上传图片,视频后的路径回传及确定逻辑
业务场景1: 后台要上传视频,图片到网站的首页或者附页,上传后,视频,图片存储到服务器或cdn,但是此时还要加确定按钮以实现该视频,图片路径数据库的插入操作. 页面展现: 点击操作按钮,触发input ...
- 使用Python访问微信
itchat是一个开源的微信个人号接口,使用它我们可以很方便的访问我们个人微信号里的信息.itchat的github地址如下: https://github.com/littlecodersh/itc ...
- fabric网络环境启动过程详解
这篇文章对fabric的网络环境启动过程进行讲解,也就是我们上节讲到的启动测试fabric网络环境时运行network_setup.sh这个文件的执行流程 fabric网络环境启动过程详解 上一节我们 ...
- vue 上拉加载自定义组件,超好用哦
1.创建组件components > zj-roll > index.vue <template> <div> <slot></slot> ...
- php-parser在Aop编程中的使用
在laravel下使用php-parser实现aop composer require nikic/php-parser Test.php <?php /** * Created by PhpS ...
- 正则表达式中pw、IDCard和EM匹配
1密码强度正则 //密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符 var pPattern = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])( ...