Nio
文章平均质量分 92
奔跑-起点
这个作者很懒,什么都没留下…
展开
-
Java NIO系列教程(一) Java NIO 概述
原文链接 Java NIO 由以下几个核心部分组成:ChannelsBuffersSelectors虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 构成了核心的API。其它组件,如Pipe和FileLock,只不过是与三个核心组件共同使用的工具类。因此,在概述中我将集中在这三个组件上。其它组件会在转载 2016-04-05 13:25:30 · 245 阅读 · 0 评论 -
Java IO
一、java io 概述1.1 相关概念Java IOJava IO即Java 输入输出系统。不管我们编写何种应用,都难免和各种输入输出相关的媒介打交道,其实和媒介进行IO的过程是十分复杂的,这要考虑的因素特别多,比如我们要考虑和哪种媒介进行IO(文件、控制台、网络),我们还要考虑具体和它们的通信方式(顺序、随机、二进制、按字符、按字、按行等等)。Java类库的设计者通过设转载 2016-06-28 14:08:05 · 342 阅读 · 0 评论 -
Java NIO 详解(一)
NIO即新的输入输出,这个库是在JDK1.4中才引入的。它在标准java代码中提供了高速的面向块的IO操作。一、基本概念描述1.1 I/O简介I/O即输入输出,是计算机与外界世界的一个借口。IO操作的实际主题是操作系统。在java编程中,一般使用流的方式来处理IO,所有的IO都被视作是单个字节的移动,通过stream对象一次移动一个字节。流IO负责把对象转换为字节,然后再转载 2016-06-28 14:07:12 · 387 阅读 · 0 评论 -
解析Disruptor的依赖关系
原文地址:http://ifeve.com/dissecting-disruptor-wiring-up/作者:Trisha 译者:廖涵 校对:方腾飞现在我已经讲了 RingBuffer 本身,如何从它 读取 以及如何向它 写入。从逻辑上来说,下一件要做的事情就是把所有的东西拼装到在一起。我前面提到过多生产者的情况——他们通过 ProducerBarrier转载 2016-06-27 14:21:45 · 675 阅读 · 0 评论 -
Disruptor(无锁并发框架)-发布
原文:http://blog.codeaholics.org/2011/the-disruptor-lock-free-publishing/译者:罗立树假如你生活在另外一个星球,我们最近开源了一套高性能的基于消息传递的开源框架。下面我给大家介绍一下如何将消息通过Ring buffer在无锁的情况下进行处理。在深入介绍之前,可以先快速阅读一下Trish发表的文章,该转载 2016-06-27 14:15:24 · 392 阅读 · 0 评论 -
剖析Disruptor:为什么会这么快?(二)神奇的缓存行填充
原文地址:http://ifeve.com/disruptor-padding/作者:Trisha 译者:方腾飞 校对:丁一我们经常提到一个短语Mechanical Sympathy,这个短语也是Martin博客的标题(译注:Martin Thompson),Mechanical Sympathy讲的是底层硬件是如何运作的,以及与其协作而非相悖的编程方式。我在上一篇文转载 2016-06-27 13:40:46 · 342 阅读 · 0 评论 -
剖析Disruptor:为什么会这么快?(一)锁的缺点
原文:http://ifeve.com/disruptor-locks-are-bad/作者:Trisha’s 译者:张文灼,潘曦 整理和校对:方腾飞,丁一Martin Fowler写了一篇非常好的文章,里面不仅提到了Disruptor,而且还解释了Disruptor 如何应用在LMAX的架构里。里面有提及了一些目前没有涉及的概念,但最经常问到的问题是 “Disruptor转载 2016-06-27 13:40:13 · 303 阅读 · 0 评论 -
剖析Disruptor:为什么会这么快?(一)Ringbuffer的特别之处
原文地址:http://ifeve.com/ringbuffer/作者:Trisha 译者:寒桐 校对:方腾飞最近,我们开源了LMAX Disruptor,它是我们的交易系统吞吐量快(LMAX是一个新型的交易平台,号称能够单线程每秒处理数百万的订单)的关键原因。为什么我们要将其开源?我们意识到对高性能编程领域的一些传统观点,有点不对劲。我们找到了一种更好、更快地在线程间转载 2016-06-27 11:35:09 · 379 阅读 · 0 评论 -
剖析Disruptor:为什么会这么快?(三)揭秘内存屏障
原文地址:http://ifeve.com/disruptor-memory-barriers/译者:杜建雄 校对:欧振聪最近我博客文章更新有点慢,因为我在忙着写一篇介绍内存屏障(Memory Barries)以及如何将其应用于Disruptor的文章。问题是,无论我翻阅了多少资料,向耐心的Martin和Mike请教了多少遍,以试图理清一些知识点,可我总是不能直观地抓到重点转载 2016-06-27 11:28:08 · 507 阅读 · 0 评论 -
Java NIO 详解(二)
在我的上一篇文章JavaNIO详解(一)中介绍了关于标准输入输出NIO相关知识, 本篇将重点介绍基于网络编程NIO(异步IO)。异步IO异步 I/O 是一种没有阻塞地读写数据的方法。通常,在代码进行 read() 调用时,代码会阻塞直至有可供读取的数据。同样, write()调用将会阻塞直至数据能够写入,关于同步的IO请参考另一篇文章Java IO。另一方面,异步 I/转载 2016-06-28 14:08:48 · 315 阅读 · 0 评论 -
Java RMI原理与使用
Java RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。Java RMI概念在Java中,只要一个类继承了java.rmi.Remote接口,即可成为存在于服务器端的远程对象,供客户端访问并提供一定的服务。JavaDoc描述:Remote 接口用于转载 2016-06-28 14:10:03 · 359 阅读 · 0 评论 -
protocol buffer的使用
protobuf介绍 按照官网的描述:protobuf是google提供的一个开源序列化框架。主要 应用于通信协议,数据存储中的结构化数据的序列化。它类 似于XML,JSON这样的数据表示语言,其最大的特点是基于二进制,因此比传统的XML表示高效短小得多。虽然是二进制数据格式,但并没有因此变得复 杂,开发人员通过按照一定的语法定义结构化的消息格式,然后送给命令行工具,工原创 2017-03-23 16:31:04 · 354 阅读 · 0 评论 -
Netty ChannelBuffer
ChannelBuffer是Netty中比较常用的一个类,其功能类似于字符数组,可以对其进行读写操作。ChannelBuffer的模型图如下: +-------------------+------------------+------------------+ | discardable bytes | readable bytes | writable bytes原创 2017-03-23 10:20:25 · 656 阅读 · 0 评论 -
Netty4.0学习笔记系列之六:多种通讯协议支持
上文介绍了如何应用Netty开发自定义通讯协议,本文在此基础上进一步深化,研究如何同时支持不同的通讯协议。此处所谓的通讯协议,指的是把Netty通讯管道中的二进制流转换为对象、把对象转换成二进制流的过程。转换过程追根究底还是ChannelInboundHandler、ChannelOutboundHandler的实现类在进行处理。ChannelInboundHandler负责把二进制流转换原创 2016-07-02 18:59:36 · 3359 阅读 · 0 评论 -
Netty4.0学习笔记系列之五:自定义通讯协议
Netty中,通讯的双方建立连接后,会把数据按照ByteBuf的方式进行传输,例如http协议中,就是通过HttpRequestDecoder对ByteBuf数据流进行处理,转换成http的对象。基于这个思路,我自定义一种通讯协议:Server和客户端直接传输java对象。实现的原理是通过Encoder把java对象转换成ByteBuf流进行传输,通过Decoder把ByteBuf转换成j原创 2016-07-02 18:58:52 · 637 阅读 · 0 评论 -
Netty4.0学习笔记系列之四:混合使用coder和handler
Handler如何使用在前面的例子中已经有了示范,那么同样是扩展自ChannelHandler的Encoder和Decoder,与Handler混合后又是如何使用的?本文将通过一个实际的小例子来展示它们的用法。该例子模拟一个Server和Client,两者之间通过http协议进行通讯,在Server内部通过一个自定义的StringDecoder把httprequest转换成String。S原创 2016-07-02 18:58:02 · 977 阅读 · 1 评论 -
Netty4.0学习笔记系列之二:Handler的执行顺序
Handler在netty中,无疑占据着非常重要的地位。Handler与Servlet中的filter很像,通过Handler可以完成通讯报文的解码编码、拦截指定的报文、统一对日志错误进行处理、统一对请求进行计数、控制Handler执行与否。一句话,没有它做不到的只有你想不到的。Netty中的所有handler都实现自ChannelHandler接口。按照输出输出来分,分为ChannelI原创 2016-07-02 18:56:51 · 3142 阅读 · 0 评论 -
Netty4.0学习笔记系列之一:Server与Client的通讯
本文是学习Netty的文章,主要对Netty的Server和Client间的通讯机制进行验证。Server与Client建立连接后,会执行以下的步骤:1、Client向Server发送消息:Are you ok?2、Server接收客户端发送的消息,并打印出来。3、Server端向客户端发送消息:I am ok!4、Client接收Server端发送的消息,原创 2016-07-02 18:55:22 · 649 阅读 · 0 评论 -
netty 学习 (1)
摘要本文是学习Netty的第一篇文章,主要对Netty的Server和Client间的通讯机制进行验证。Server与Client建立连接后,会执行以下的步骤: 1、Client向Server发送消息:Are you ok? 2、Server接收客户端发送的消息,并打印出来。 3、Server端向客户端发送消息:I am ok! 4、Client接收Server端发转载 2016-07-02 18:40:29 · 344 阅读 · 0 评论 -
如何使用Disruptor(二)如何从Ringbuffer读取
英文原文:http://ifeve.com/dissecting-the-disruptor-how-do-i-read-from-the-ring-buffer/作者:Trisha 译者:古圣昌 校对:方腾飞从上一篇文章中我们都了解了什么是Ring Buffer以及它是如何的特别。但遗憾的是,我还没有讲述如何使用Disruptor向Ring Buffer写数据和从Ri转载 2016-06-27 11:12:09 · 352 阅读 · 0 评论 -
LMAX Disruptor——一个高性能、低延迟且简单的框架
原文地址:LMAX Disruptor – High Performance, Low Latency and Simple Too 翻译:杨帆 校对:丁一Disruptor是一个用于在线程间通信的高效低延时的消息组件,它像个增强的队列,并且它是让LMAX Exchange跑的如此之快的一个关键创新。关于什么是Disruptor、为何它很重要以及它的工作原理方面的信息都呈爆炸性增长 ——转载 2016-06-27 11:10:40 · 1494 阅读 · 0 评论 -
Java NIO系列教程(八) SocketChannel
Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel:打开一个SocketChannel并连接到互联网上的某台服务器。一个新连接到达ServerSocketChannel时,会创建一个SocketChannel。打开 SocketChannel下面是SocketChannel的打开方式:转载 2016-04-05 15:29:05 · 380 阅读 · 0 评论 -
Java NIO系列教程(七) FileChannel
Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。打开FileChannel在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileChannel,需要通过使用一个InputStream、OutputStream或RandomAcc转载 2016-04-05 15:01:28 · 311 阅读 · 0 评论 -
Java NIO系列教程(六) Selector
Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。下面是本文所涉及到的主题列表:为什么使用Selector?Selector的创建向Selector注册通道SelectionKey通过Selector选择通道wakeUp()close()完整转载 2016-04-05 15:00:44 · 350 阅读 · 0 评论 -
Java NIO系列教程(五) 通道之间的数据传输
在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel。transferFrom()FileChannel的transferFrom()方法可以将数据从源通道传输到FileChannel中(译者注:这个方法在JDK文档中的解释为将字节从给定的可读取字节通道传输到此转载 2016-04-05 14:42:28 · 312 阅读 · 0 评论 -
Java NIO 教程
Java NIO(New IO)是另一个JavaIO的 API(从Java 1.4),这意味着替代标准Java IO和Java网络API。Java NIO提供一种不同的方法来处理标 API。Java NIO:channels和Buffers在标准IO API您使用的是字节流和字符流。在NIO中使用的是Channels和Buffers。数据总是从Channel读取到缓冲区翻译 2016-04-05 13:18:35 · 583 阅读 · 0 评论 -
Java NIO系列教程(四) Scatter/Gather
Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(译者注:Channel在中文经常翻译为通道)中读取或者写入到Channel的操作。分散(scatter)从Channel中读取是指在读操作时将读取的数据写入多个buffer中。因此,Channel将从Channel中读取的数据“分散(scatter)”到多个Buffer中。聚集(ga转载 2016-04-05 14:35:32 · 346 阅读 · 0 评论 -
Java NIO系列教程(三) Buffer
Java NIO中的Buffer用于和NIO通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存。下面是NIO Buffer相关的话题列表:Buffer的基本用法Buffer的capacity,position和l转载 2016-04-05 13:29:57 · 269 阅读 · 0 评论 -
Java NIO系列教程(二) Channel
Java NIO的通道类似流,但又有些不同:既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。通道可以异步地读写。通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:Channel的实现这些是Java NIO中最重要的通道的实现:转载 2016-04-05 13:29:06 · 248 阅读 · 0 评论 -
Java NIO系列教程(九) ServerSocketChannel
Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样。ServerSocketChannel类在 java.nio.channels包中。这里有个例子:ServerSocketChannel serverSocketChannel = ServerSocketChannel.open()转载 2016-04-05 15:38:23 · 340 阅读 · 0 评论 -
Java NIO系列教程(十) Java NIO DatagramChannel
Java NIO中的DatagramChannel是一个能收发UDP包的通道。因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入。它发送和接收的是数据包。打开 DatagramChannel下面是 DatagramChannel 的打开方式:1DatagramChannel channel = DatagramChan转载 2016-04-05 15:50:24 · 370 阅读 · 0 评论 -
Disruptor入门
翻译自Disruptor git库教程 英文地址获得Disruptor可以通过Maven或者下载jar来安装Disruptor。只要把对应的jar放在Java classpath就可以了。基本的事件生产和消费我们从一个简单的例子开始学习Disruptor:生产者传递一个long类型的值给消费者,而消费者消费这个数据的方式仅仅是把它打印出来。首先声明一个Eve转载 2016-04-11 13:21:26 · 811 阅读 · 0 评论 -
2015年度新增开源软件排名TOP100
1月16日厦门OSC源创会火热报名中,奖品多多哦? 本榜单包含2015年开源中国新收录的软件中,根据软件本身的关注度、活跃程度进行排名前100名的软件。从这份榜单中或许可以了解到最新业界的趋势。 1、SwitchyOmega 项目简介:SwitchyOmega是SwitchySharp的新版本。这是一个Chrome浏览器用来切换不同代理的插件。Switch转载 2016-04-26 11:03:46 · 3406 阅读 · 0 评论 -
Java NIO框架Netty教程(四) – ServerBootStrap启动流程源码分析
有一段事件没有更新文章了,各种原因都有吧。搬家的琐事,搬家后的安逸呵呵。不过,OneCoder明白,绝不能放松。对于Netty的学习,也该稍微深入一点了。所以,这次OneCoder花了几天时间,仔细梳理了一下Netty的源码,总结了一下ServerBootStrap的启动和任务处理流程,基本涵盖了Netty的关键架构。 OneCoder总结了一张流程图: 该图转载 2016-04-08 12:38:09 · 417 阅读 · 0 评论 -
Java NIO框架Netty教程(三) – Object对象传递
说了这么多废话,才提到对象的传输,不知道您是不是已经不耐烦了。一个系统内部的消息传递,没有对象传递是不太现实的。下面就来说说,怎么传递对象。如果,您看过前面的介绍,如果您善于专注本质,勤于思考。您应该也会想到,我们说过,Netty的消息传递都是基于流,通过ChannelBuffer传递的,那么自然,Object也需要转换成ChannelBuffer来传递。好在Netty本身已经给我们写好了转载 2016-04-08 12:37:20 · 408 阅读 · 0 评论 -
Java NIO框架Netty教程(二)
"Hello World"的代码固然简单,不过其中的几个重要概念(类)和 Netty的工作原理还是需要简单明确一下,至少知道其是负责什。方便自己以后更灵活的使用和扩展。 声明,笔者一介码农,不会那么多专业的词汇和缩写,只能以最简单苍白的话来形容个人的感受和体会。如果您觉得这太不专业,笔者首先只能抱歉。然后,笔者曾转过《Netty代码分析》,您可参考。ChannelEvent转载 2016-04-08 12:35:24 · 351 阅读 · 0 评论 -
Java NIO框架Netty教程(一) – Hello Netty
先啰嗦两句,如果你还不知道Netty是做什么的能做什么。那可以先简单的搜索了解一下。我只能说Netty是一个NIO的框架,可以用于开发分布式的Java程序。具体能做什么,各位可以尽量发挥想象。技术,是服务于人而不是局限住人的。如果你已经万事具备,那么我们先从一段代码开始。程序员们习惯的上手第一步,自然是"Hello world",不过Netty官网的例子却偏偏抛弃了"Hello world转载 2016-04-08 12:02:45 · 353 阅读 · 0 评论 -
Java NIO系列教程(十二) Java NIO与IO
当学习了Java NIO和IO的API后,一个问题马上涌入脑海:我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异、它们的使用场景,以及它们如何影响您的代码设计。Java NIO和IO的主要区别下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分的差异。IO NIO面向流转载 2016-04-05 17:13:54 · 269 阅读 · 0 评论 -
Java NIO系列教程(十一) Pipe
Java NIO 管道是2个线程之间的单向数据连接。Pipe有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取。这里是Pipe原理的图示:创建管道通过Pipe.open()方法打开管道。例如:Pipe pipe = Pipe.open();向管道写数据要向管道写数据,需要访问sink通道。像这样:转载 2016-04-05 16:59:44 · 392 阅读 · 0 评论 -
Reactor模式详解
前记第一次听到Reactor模式是三年前的某个晚上,一个室友突然跑过来问我什么是Reactor模式?我上网查了一下,很多人都是给出NIO中的 Selector的例子,而且就是NIO里Selector多路复用模型,只是给它起了一个比较fancy的名字而已,虽然它引入了EventLoop概 念,这对我来说是新的概念,但是代码实现却是一样的,因而我并没有很在意这个模式。然而最近开始读Netty源码,原创 2017-05-26 10:24:14 · 255 阅读 · 0 评论