Java之IO模型】的更多相关文章

在进入主题之前先看个 Java 网络编程的一个简单例子:代码很简单,客户端和服务端进行通信,对于客户端的每次输入,服务端回复 get.注意,服务端可以同时允许多个客户端连接. 服务端端代码: // 创建服务端 socket ServerSocket serverSocket = new ServerSocket(20000); client = serverSocket.accept(); // 客户端连接成功,输出提示 System.out.println("客户端连接成功"); /…
众所周知 如果去百度.腾讯等一线大厂面试,一定会深入考候选人的基础技术功底,其中尤为关键和重视的就是IO相关的技术和知识. 而要搞明白IO相关的概念,首先就得弄清楚同步与异步,阻塞与非阻塞到底是什么意思. 同步与异步 想要搞明白IO模型,就先得搞明白"同步"与"异步"的关系. 所谓的"同步",比如说调用者去调用一个接口,这个接口比如要执行一些磁盘文件读写操作,或者是网络通信操作. 假设是"同步"的模式,调用者必须要等待这个接口…
网络IO模型及分类 网络IO模型是一个经常被提到的问题,不同的书或者博客说法可能都不一样,所以没必要死抠字眼,关键在于理解. Socket连接 不管是什么模型,所使用的socket连接都是一样的. 以下是一个典型的应用服务器上的连接情况.客户的各种设备通过Http协议与Tomcat进程交互,Tomcat需要访问Redis服务器,它与Redis服务器也建了好几个连接.虽然客户端与Tomcat建的是短连接,很快就会断开,Tomcat与Redis是长连接,但是它们本质上都是一样的. 建立一个Socke…
首先来看一下同步与异步的概念: 1.同步是指当前端发起一次操作请求时,只有后台执行完所有的代码操作才会给前端返回值. 2.异步是将前端发回的消息加入消息队列,并且立刻给前端返回请求,告诉用户可以离开当前页面去做别的事情.当后台处理完成,操作系统会通知事件和回调机制等通知相应的县城进行后续操作. 同步和异步最大的区别在于:一个需要等待,一个不需要等待. 接下来解释一下常见的IO模型: 阻塞IO模型(最传统的IO模型):在读写数据过程中会发生阻塞现象.当用户线程发出IO请求之后,内核会去查看数据是否…
I/O模型 在开始NIO的学习之前,先对I/O的模型有一个理解,这对NIO的学习是绝对有好处的.我画一张图,简单表示一下数据从外部磁盘向运行中进程的内存区域移动的过程: 这张图片明显忽略了很多细节,只涉及了基本操作,下面分析一下这张图. 用户空间和内核空间 一个计算机通常有一定大小的内存空间,如一台计算机有4GB的地址空间,但是程序并不能完全使用这些地址空间,因为这些地址空间是被划分为用户空间和内核空间的.程序只能使用用户空间的内存,这里所说的使用是指程序能够申请的内存空间,并不是真正访问的地址…
一.AIO简介 AIO是java中IO模型的一种,作为NIO的改进和增强随JDK1.7版本更新被集成在JDK的nio包中,因此AIO也被称作是NIO2.0.区别于传统的BIO(Blocking IO,同步阻塞式模型,JDK1.4之前就存在于JDK中,NIO于JDK1.4版本发布更新)的阻塞式读写,AIO提供了从建立连接到读.写的全异步操作.AIO可用于异步的文件读写和网络通信. 二.同步/异步.阻塞/非阻塞 我们先来了解下什么是同步/异步,以及什么是阻塞/非阻塞.在IO操作中,IO分两阶段(一旦…
概述 Netty其实就是一个异步的.基于事件驱动的框架,其作用是用来开发高性能.高可靠的IO程序. 因此下面就让我们从Java的IO模型来逐步深入学习Netty. IO模型 IO模型简单来说,就是采用如何的方式来进行数据的接受和发送,因为存在着发送方和接收方两个角色,因此IO模型一般分为以下3类:BIO(同步阻塞).NIO(同步非阻塞).AIO(异步非阻塞).其3者的区别如下: BIO:是最传统的Java IO模型,采用的方式为服务器新接受到一个连接,就建立一个线程,但是如果这个连接不做任何事情…
上期结合程序员小猿用温奶器给孩子热奶的故事,把面试中常聊的“同步.异步与阻塞.非阻塞有啥区别”简单进行普及. 不过,恰逢春节即将到来,应个景,不妨就通过实现新春送祝福的需求,深入了解一下 Java IO. 01. 全局视角:会当凌绝顶,一览众山小 IO 是 Input.Output 的缩写,翻译过来就是输入.输出. 在业务设计而言,输入输出主要是指 API 接口的规范定义,因为只要定义好输入输出,其它都是时间的问题:而在程序设计而言,主要是指磁盘 IO 以及网络 IO(个人愚论). 在 Java…
同步/异步.阻塞/非阻塞 说的是一回事儿吗? 同步/异步.阻塞/非阻塞 你能通俗易懂的讲清楚吗? Java 中的 BIO.NIO.AIO 你了解吗? Socket 编程你还会吗? Linux 操作系统的 IO 模型你能讲讲吗? 01. 生活中的同步/异步.阻塞/非阻塞 程序猿有了孩子之后,从原来的劈柴喂马周游世界,就变成了撸码喂娃家里蹲蹲. 说起喂娃,不得不提小猿给孩子热奶的事情.给孩子喂奶,有些时候喝着喝着就凉了,要时不时给孩子热一热. 起初,由于带娃没有经验,小猿直接把奶瓶放进一个自制的温奶…
<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请求给操作系统内核,操作系统内核需要等待数据就绪,这里的数据可能来自别的应用…