NIO 介绍 NIO,可以说是New IO,也可以说是non-blocking IO,具体怎么解释都可以. NIO 1是在JSR51里面定义的,在JDK1.4中引入,因为BolckingIO不支持高并发网络编程,这也是Java1.4以前被人诟病的原因.NIO 2是在JSR203中定义的,在JDK1.7中引入,这是JavaNIO整个的发展历程.NIO 1和NIO 2并不是一个新旧替代的关系,而是一个补充的关系,NIO 2补充了1中缺少的一些东西.我们可以看一下两个的内容: NIO 1(本系列文章只…
002-PHP基础-01-PHP快速入门 02-PHP语言相关介绍 1.PHP是什么 Hypertext Preprocessor超文本预处理器 是一种通用开源脚本语言 Personal Home Page 图-1 2.PHP能做什么 1.WEB应用的开发,PHP开发网站 2.命令行脚本 3.编写桌面应用程序 VB,JAVASE,C++,C# 3.为什么选择学习PHP 目前流行的开发语言主要有: PHP C++ Java C# IOS C语言 注:以上列举与语言使用排名无关 系统软件开发 操作系…
Java NIO 之 Buffer Java NIO (Non Blocking IO 或者 New IO)是一种非阻塞IO的实现.NIO通过Channel.Buffer.Selector几个组件的协同实现提升IO效率的目的.而ByteBuffer是其中最基础的一种Buffer实现. 阻塞 or 非阻塞 阻塞/非阻塞,同步/异步是两组非常容易产生混淆的概念. 同步/异步:是从消息通信机制的划分,如果调用者在没有得到结果前"调用"不返回,则是同步的.而如果调用发出后,调用直接返回,结果由…
​ Java NIO中的缓存区(Buffer)用于和通道(Channel)进行交互.数据是从通道读入缓冲区,从缓冲区写入到通道中的. ​ 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存. ​ Buffer底层使用数组实现. 1.NIO 数据读取基本操作示意 2.Java NIO中Buffer类型 ​ Java NIO中,根据数据类型不同(boolean 除外),提供了相应类型的缓冲区: ByteBuf…
Java NIO Selector Selector是Java NIO中的一个组件,用于检查一个或多个NIO Channel的状态是否处于可读.可写.如此可以实现单线程管理多个channels,也就是可以管理多个网络链接. 前面说过通道就是连接,比如同一时间有很多连接过来,这些连接,也就是channel都会注册到Selector中,Selector就会巡视这些channel,看看哪些可以操作(可读或者可写),并不会进行读写操作.而仅仅进行巡视,并不是很麻烦,所以即使Selector是单个线程也是…
前面简单的介绍了Java I/O 和NIO,写了示例程序. Java I/O是阻塞的,为了让它支持多个并发,就要针对每个链接启动线程,这种方式的结果就是在海量链接的情况下,会创建海量的线程,就算用线程池去缓解,也是治标不治本.所以,Java I/O 不适合高并发高性能的网络编程需求. NIO的出现就是为了解决这个问题,NIO中一个线程可以关注多个链接,解决了线程问题,前面也演示了如何用NIO编程.大家可以看到使用NIO是非常复杂的,可以说是陷阱重重,不是在网络编程方面很资深的程序员,很难用NIO…
前面的内容对netty进行了介绍,写了一个入门例子.作为一个netty的使用者,我们关注更多的还是业务代码.也就是netty中这两种组件: ChannelHandler和ChannelPipeline---对应于NIO中的客户逻辑实现handleRead/handleWrite(interceptor pattern) ByteBuf---- 对应于NIO 中的ByteBuffer 我们的业务逻辑要放在handler里面,读写数据用的是ByteBuf.其余的Transport.ServerBoo…
目录 前言 1. Java 网络编程 1.1 Javs NIO 基本介绍 1.2 缓冲区 Buffer 1.2 通道 Channel 1.3 选择器 Selector 1.4 NIO 非阻塞网络编程原理分析 2. 线程模型概述 2.1 传统阻塞 IO 服务模型 2.2 Reactor 模式 2.3 单 Reactor 单线程模式 2.4 单 Reactor 多线程模式 2.5 主从 Reactor 多线程模式 2.6 Netty 模型 最后 前言 参考资料: <Netty In Action>…
一 初遇Netty Netty是什么? Netty 是一个提供 asynchronous event-driven (异步事件驱动)的网络应用框架,是一个用以快速开发高性能.可扩展协议的服务器和客户端. Netty能做什么? Netty 是一个 NIO 客户端服务器框架,使用它可以快速简单地开发网络应用程序,比如服务器(HTTP服务器,FTP服务器,WebSocket服务器,Redis的Proxy服务器等等)和客户端的协议.Netty 大大简化了网络程序的开发过程比如 TCP 和 UDP 的 s…
Buffer 一个 Buffer 本质上是内存中的一块,我们可以将数据写入这块内存,之后从这块内存获取数据. java.nio 定义了以下几个 Buffer 的实现,这个图读者应该也在不少地方见过了吧. 其实核心是最后的 ByteBuffer,前面的一大串类只是包装了一下它而已,我们使用最多的通常也是 ByteBuffer. 我们应该将 Buffer 理解为一个数组,IntBuffer.CharBuffer.DoubleBuffer 等分别对应 int[].char[].double[] 等.…