操作系统的IO模型】的更多相关文章

IO操作根据设备类型一般分为内存IO,网络IO,和磁盘IO.其中内存IO的速度大大快于后两者,计算机的性能瓶颈一般不在于内存IO. 尽管网络IO可通过购买独享带宽和高速网卡来提升速度,可以使用RAID磁盘阵列来提升磁盘IO的速度,但是由于IO操作都是由系统内核调用来完成,而系统调用是通过cpu来调度的,而cpu的速度远远快于IO操作,导致会浪费cpu的宝贵时间来等待慢速的IO操作.为了让cpu和慢速的IO设备更好的协调工作,减少CPU在IO调用上的消耗,逐渐发展出各种IO模型. IO模型 IO步…
描述IO,我们需要从两个层面: 编程语言 实现原理 底层基础 从编程语言层面 BIO | NIO | AIO 以Java的角度,理解,linux c里也有AIO的概念(库),本文只从Java角度入手. BIO,同步阻塞式IO,简单理解:一个连接一个线程 NIO,同步非阻塞IO,简单理解:一个请求一个线程 AIO,异步非阻塞IO,简单理解:一个有效请求一个线程 BIO 在JDK1.4之前,用Java编写网络请求,都是建立一个ServerSocket,然后,客户端建立Socket时就会询问是否有线程…
Linux 为什么要区分内核空间与用户空间? Linux 操作系统的 IO 模型有哪几种?有啥区别? 常说的阻塞现象,到底是咋回事? 网络编程研发时,那块到底耗时最多,代码是否还有优化空间? 前几期的分享,我们站在编码视角去聊 Java IO,旨在理解与编码,本次从 Linux 操作系统层面了解一下 IO 模型,这样方能做到知其然,知其所以然. 01. 内核空间.用户空间 万事万物我们看到的皆是表象,操作系统也不例外.我们经常打交道的用户界面,是操作系统的外在表象,内核才是操作系统的内在核心.…
同步/异步.阻塞/非阻塞 说的是一回事儿吗? 同步/异步.阻塞/非阻塞 你能通俗易懂的讲清楚吗? Java 中的 BIO.NIO.AIO 你了解吗? Socket 编程你还会吗? Linux 操作系统的 IO 模型你能讲讲吗? 01. 生活中的同步/异步.阻塞/非阻塞 程序猿有了孩子之后,从原来的劈柴喂马周游世界,就变成了撸码喂娃家里蹲蹲. 说起喂娃,不得不提小猿给孩子热奶的事情.给孩子喂奶,有些时候喝着喝着就凉了,要时不时给孩子热一热. 起初,由于带娃没有经验,小猿直接把奶瓶放进一个自制的温奶…
前言 说到IO模型,都会牵扯到同步.异步.阻塞.非阻塞这几个词.从词的表面上看,很多人都觉得很容易理解.但是细细一想,却总会发现有点摸不着头脑.自己也曾被这几个词弄的迷迷糊糊的,每次看相关资料弄明白了,然后很快又给搞混了.经历过这么几次之后,发现这东西必须得有所总结提炼才不至于再次混为一谈.尤其是最近看到好几篇讲这个的文章,很多都有谬误,很容易把本来就搞不清楚的人弄的更加迷糊. 最适合IO模型的例子应该是咱们平常生活中的去餐馆吃饭这个场景,下文就结合这个来讲解一下经典的几个IO模型.在此之前,先…
针对linux 操作系统的5类IO模型,阻塞式.非阻塞式.多路复用.信号驱动和异步IO进行整理,参考<linux网络编程>及相关网络资料. 阻塞模式 在socket编程(如下图)中调用如下四类函数导致阻塞: 读操作(read.readv.recv.recvfrom.recvmsg):当应用程序调用读函数,该系统调用进入内核态,若套接字接收缓冲区无数据则阻塞,数据到达则将接收缓冲区数据拷贝至进程缓冲区并返回.对TCP而言,一旦接收缓冲区中与数据则进程被唤醒,对UDP而言有完整的UDP报文达到进程…
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西.这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不相同.所以,为了更好的回答这个问题,我先限定一下本文的上下文. 本文讨论的背景是Linux环境下的n…
术语概念描述: IO有内存IO.网络IO和磁盘IO三种,通常我们说的IO指的是后两者. 阻塞和非阻塞,是函数/方法的实现方式,即在数据就绪之前是立刻返回还是等待. 以文件IO为例,一个IO读过程是文件数据从磁盘→内核缓冲区→用户内存的过程.同步与异步的区别主要在于数据从内核缓冲区→用户内存这个过程需不需要用户进程等待.有个数据拷贝的过程,是拷贝完再通知还是在内核缓冲区就通知.(网络IO把磁盘换做网卡即可) Linux IO模型 同步阻塞 同步非阻塞 IO复用 信号驱动 异步非阻塞 同步阻塞 去餐…
<Unix网络编程:卷1>中介绍了5中I/O模型,JAVA作为运行在宿主机上的程序,底层也遵循这5中I/O模型规则.这5中I/O模型分别是: 阻塞式IO 非阻塞式IO I/O复用 信号驱动式IO 异步IO 按POSIX标准来分,IO分为同步和异步,上面的前4钟都属于同步IO,具体后面解释. 在介绍IO模型之前,需要先了解应用程序IO的过程,一般来说,一个IO分为两个阶段 应用程序向操作系统发出IO请求:应用程序发出IO请求给操作系统内核,操作系统内核需要等待数据就绪,这里的数据可能来自别的应用…
本文转载自: http://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666538919&idx=1&sn=6013c451b5f14bf809aec77dd5df6cff&scene=21#wechat_redirect 上一篇<聊聊同步.异步.阻塞与非阻塞>已经通俗的讲解了,要理解同步.异步.阻塞与非阻塞重要的两个概念点了,没有看过的,建议先看这篇博文理解这两个概念点.在认知上,建立统一的模型.这样,大家在…