1.IO的演进】的更多相关文章

一.引言 Java1.4之前的早期版本,Java对I/O的支持并不完善,开发人员再开发高性能I/O程序的时候,会面临一些巨大的挑战和困难,主要有以下一些问题: (1)没有数据缓冲区,I/O性能存在问题 (2)没有C或者C++中的Channel概念,只有输入和输出流 (3)同步阻塞式I/O通信(BIO),通常会导致通信线程被长时间阻塞 (4)支持的字符集有限,硬件可移植性不好 本篇从底层的Linux操作系统I/O模型的系统调用开始说起,逐步介绍Java的I/O的发展及相关核心概念. 二.Linux…
  1.Java IO 演进之路 本文围绕着一下几个问题 1.Java 中 BIO.NIO.AIO 之间的区别及应用场景. 2.阻塞(Block)与非阻塞(Non-Block)区别. 3.同步(Synchronization)和异步(Asynchronous)的区别.   1.1 几个概念 1.1.1 阻塞(Block)和非阻塞(Non-Block) 阻塞和非阻塞是进程在访问数据的时候,数据是否准备就绪的一种处理方式,当数据没有准备的时候. 阻塞:往往需要等待缓冲区中的数据准备好过后才处理其他的…
之前一直对NIO感兴趣,无奈对IO的很多概念很模糊,所以对于NIO的学习也是一直半解,最近在网上查阅了很多资料,发现有很多概念是需要反复理解的,有的时候甚至当时理解了,但一段时间后又忘记了,所以决定自己整理一份. 一..关于IO的一些基本概念 1.同步:如果有多个任务或者事件要发生,这些任务或者事件必须逐个地进行,一个事件或者任务的执行会导致整个流程的暂时等待,这些事件没有办法并发地执行: 2.异步:如果有多个任务或者事件发生,这些事件可以并发地执行,一个事件或者任务的执行不会导致整个流程的暂时…
下载链接:http://trac.osgeo.org/geos/ 1. 打开cmake,加载geos源码和定位geos的工程存放位置: 2.点击configure,会报错,首先设置CMAKE_INSTALL-PREFIX定位到geos源码文件目录 3.然后打开链接https://trac.osgeo.org/geos/browser/trunk/cmake/modules 下载GenerateSourceGroups.cmake文件. 4.将下载后的文件放到使用的cmake3.11.0中,我使用…
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7419117.html JDK1.4之前的早期版本,Java对I/O的支持并不完善,开发人员在开发高性能I/O程序的时候,会面临一些巨大的挑战和困难,主要问题如下: 没有数据缓冲区,I/O性能存在问题: 没有C或者C++中的Channel概念,只有输入和输出流: 同步阻塞式I/O通信(BIO),通常会导致通信线程被长时间阻塞: 支持的字符集有限,硬件可移植性不好. 在Java支持异步I/O之前的很长一段时间…
Unix中5种IO模型 就网络通信而言,一次数据读入可以分为两个阶段,首先等待数据从网络中到达,到达后需要复制到内核的缓冲区中,第二个阶段是从内核的缓冲区复制到进程的缓冲区,复制到进程的缓冲区才算读取完毕.推广到所有IO,一次完整的IO读入分为两个阶段 等待数据准备完毕 把准备好的数据读到进程的内存空间 各种IO模型的区别在于当一个进程读取的数据没有准备好的时候该进程如何应对. 阻塞式IO 等待数据准备阶段,进程会一直阻塞,直到数据准备好或者抛出异常.调用recvfrom默认是阻塞式调用,当fd…
一.BIO简介 BIO是java1.4之前唯一的IO逻辑,在客户端通过socket向服务端传输数据,服务端监听端口.由于传统IO读数据的时候如果数据没有传达,IO会一直等待输入传入,所以当有请求过来的时候,新起一条线程对数据进行等待.处理,导致每一个链接都对应着服务器的一个线程. BIO是同步阻塞的,如图所示: 二.原理简述 BIO对应linux io模型的阻塞IO,服务端提供IP和监听端口,客户端通过连接操作想服务端监听的地址发起连接请求,通过三次握手连接,如果连接成功建立,双方就可以通过套接…
常见IO类型: 传统的同步阻塞I/O编程<BIO> 基于NIO的非阻塞编程 基于NIO2.0的异步非阻塞AIO编程 BIO缺点: 没有数据缓冲区,I/O性能存在问题 没有Channel概念,只有输入流和输出流 同步阻I/O通信,导致线程的长时间等待, 浪费资源 支持的字符集有限,硬件移植性不好. NIO优点: 进行异步IO操作的缓冲区ByteBuffer. 进行异步IO操作的管道Pipe 进行各种IO操作的Channel. 支持多种字符集的编码和解码能力 基于Per实现正则表达式类库 文件通道…
规范化的软件项目演进管理 从 Github 使用说起 1   前言 首先,本文的层次定位是:很基本很基础的 Github 工具的入门级应用,写给入门级的用户看的. 基本上工作过几年的人,下面描述的这些技能和思想,都应该被打磨成了一种习惯,或者说是标配的属性了吧,已经不齿于列为 技能 了.但是因为笔者也菜鸟过,在学习这些技能,接受这些思想和培养这些习惯时走过不少弯路,同时也浪费了不少时间,所以想把这些经验和教训写下来,给后来人学习时提供一点参考意见吧. 关于为什么要学会用 Github ,先用最朴…
eventloop的基本概念可以参考:http://www.ruanyifeng.com/blog/2013/10/event_loop.html Eventloop指的是独立于主线程的一条线程,专门用来处理IO事件,而如果Eventloop一个不够用,可以开多个. Eventloop底层也要基于异步的网络调用.文件调用才能发挥最大的作用. 可以看到,由于多出了橙色的空闲时间,所以主线程得以运行更多的任务,这就提高了效率.这种运行方式称为"异步模式"(asynchronous I/O)…