本文原题“从实践角度重新理解BIO和NIO”,原文由Object分享,为了更好的内容表现力,收录时有改动. 1.引言 这段时间自己在看一些Java中BIO和NIO之类的东西,也看了很多博客,发现各种关于NIO的理论概念说的天花乱坠头头是道,可以说是非常的完整,但是整个看下来之后,发现自己对NIO还是一知半解.一脸蒙逼的状态(请原谅我太笨).   基于以上原因,就有了写本文的想法.本文不会提到很多Java NIO和Java BIO的理论概念(需要的话请参见本文的“相关文章”一节),而是站在编码实践…
Java中的IO操作可谓常见.在Java的IO体系中,常有些名词容易让人困惑不解.为此,先通俗地介绍下这些名词. 1 什么是同步? 2 什么是异步? 3 什么是阻塞? 4 什么是非阻塞? 5 什么是同步阻塞? 6 什么是同步非阻塞? 7 什么是异步阻塞? 8 什么是异步非阻塞? 我们先来弄明白什么是同步,异步,阻塞,非阻塞,只有这几个概念理解清楚了,然后再组合起来理解,就相对比较容易了. 同步和异步是针对应用程序和内核的交互方式而言的. 阻塞和非阻塞是针对于进程在访问数据的时候,根据IO操作的就…
在高性能的I/O体系设计中,有几个概念常常会使我们感到迷惑不解.具体如下: 1 什么是同步? 2 什么是异步? 3 什么是阻塞? 4 什么是非阻塞? 5 什么是同步阻塞? 6 什么是同步非阻塞? 7 什么是异步阻塞? 8 什么是异步非阻塞? 先来举个现实生活中的例子: 如果你想吃一份宫保鸡丁盖饭, 同步阻塞:你到饭馆点餐,然后在那儿等着,还要一边喊:好了没啊! 同步非阻塞:在饭馆点完餐,就去遛狗了.不过遛一会儿,就回饭馆喊一声:好了没啊! 异步阻塞:遛狗的时候,接到饭馆电话,说饭做好了,让您亲自…
同步/异步.阻塞/非阻塞概念 同步异步 同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication) 同步:在发出一个调用时,在没有得到结果之前,该调用就不返回.一旦调用返回,就得到返回值了.调用者主动等待这个调用的结果.异步:调用在发出之后就直接返回了,没有立刻得到返回结果.在调用发出后,被调用者通过状态.通知来通知调用者,或通过回调函数处理这个调用. I/O 通常来说,IO操作包括:对硬盘的读写.对socket…
一.BIO与NIO以及AIO的概念 BIO是同步阻塞式的IO NIO是同步非阻塞的IO (NIO1.0,JDK1.4) AIO是非同步非阻塞的IO(NIO2.0,JDK1.7) 二.BIO简单分析 1.简单分析 BIO是阻塞的IO,原因在于accept和read会阻塞.所以单线程的BIO是无法处理并发的. 2.案例 服务端: public class BioServer { public static void main(String[] args) throws IOException {//…
学习IO,首先要明白四个东西. 1.同步            java自己去处理io. 2.异步          java将io交给操作系统去处理,告诉缓存区大小,处理完成回调. 3.阻塞          使用阻塞IO时,Java调用会一直阻塞到读写完成才返回. 4.非阻塞        使用非阻塞IO时,如果不能立马读写,Java调用会马上返回,当IO事件分发器通知可读写时在进行读写,不断循环直到读写完成. 1.BIO:同步并阻塞,服务器的实现模式是一个连接一个线程,这样的模式很明显的一…
IO 服务端ServerSocket 客户端Socket 缺点每次客户端建立连接都会另外启一个线程处理.读取和发送数据都是阻塞式的. 如果1000个客户端建立连接将会产生1000个线程 Server端 package bhz.bio.test; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class Server { private int port; priva…
一.bio的写入及读取 1.采用bio之BufferedWriter 写入文件 public static void main(String[] args) throws IOException { //创建目录的方法 String yh_path="D:\\XXXX\\9001\\XXXX\\"; //所创建文件目录 File f = new File(yh_path); if(!f.exists()){ f.mkdirs(); //创建目录 } FileUtils.makeDire…
正在学习<大型网站系统与JAVA中间件实践>,发现对BIO.NIO.AIO的概念很模糊,写一篇博客记录下来.先来说个银行取款的例子: 同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写). 异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS(银行卡和密码),OS需要支持异步IO操作API). 阻塞 : ATM排队取款,你只能等待(使用阻塞IO时,Java调用会一直阻塞到读写完成才…
转自 http://stevex.blog.51cto.com/4300375/1284437 先来个例子理解一下概念,以银行取款为例: 同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写). 异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS(银行卡和密码),OS需要支持异步IO操作API). 阻塞 : ATM排队取款,你只能等待(使用阻塞IO时,Java调用会一直阻塞到读写完成…