netty3---传统IO,NIO,nettyIO】的更多相关文章

nio是new io的简称,从jdk1.4就被引入了.现在的jdk已经到了1.6了,可以说不是什么新东西了.但其中的一些思想值得我来研究.这两天,我研究了下其中的套接字部分,有一些心得,在此分享.  首先先分析下:为什么要nio套接字?  nio的主要作用就是用来解决速度差异的.举个例子:计算机处理的速度,和用户按键盘的速度.这两者的速度相差悬殊.如果按照经典的方法:一个用户设定一个线程,专门等待用户的输入,无形中就造成了严重的资源浪费:每一个线程都需要珍贵的cpu时间片,由于速度差异造成了在这…
Channel-to-channel传输是可以极其快速的,特别是在底层操作系统提供本地支持的时候.某些操作系统可以不必通过用户空间传递数据而进行直接的数据传输.对于大量的数据传输,这会是一个巨大的帮助.--摘抄至<Java NIO> 今天学习了NIO的channel-to-channel的数据传输方式,为了对其有一个较清晰的认识,特意进行测试,并与java-io的传统传输方式进行比较.以下将通过对我测试实例的分析来阐述其用法,并挖掘其隐藏问题点.请往下看. 一.先上代码 package nio…
通过对文件的拷贝来对比传统IO流和NIO流 将底层流封装成处理流以后进行分段读取. /*将本身源代码拷贝到TXT文件*/ public class TraditionIO { public static void main(String[] args) { try(BufferedReader br = new BufferedReader(new FileReader("src/com/ming/test/TraditionIO.java")); //准备输入输出"处理&q…
1.转换流,Buffered BufferedWriter out=new BufferedWriter(new OutputStreamWriter(System.out)); BufferedReader in= new BufferedReader(new InputStreamReader(System.in); 2.数据流 3.打印流 1.PrintStream 可以方便的完成输出的功能. 2.在以后的输出中基本上都使用PrintStream 完成,因为比较方便一些.(不会抛出异常,自…
一.引入 当引入一些新功能的时候,那说明之前的设计可能还需要完善. 1.阻塞式 在传统的IO输入输出中,如果我们从流中去读数据,而数据源中没有数据时,程序就会阻塞该线程.阻塞式线程的一种基本状态,可以理解成线程就在那里等着,什么也不做. 显然,这种阻塞式的io如果正常执行还好,一旦数据缺失或网络故障,就没什么优点可言了. 2.效率不高 传统IO的介绍中,我们把流比作水管中的水滴,读和写操作都在操作"水滴",而且一次只能操作一个"水滴"(字节),效率确实有限. 因此,…
概述 nio 同步: 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写). 异步: 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS(银行卡和密码),OS需要支持异步IO操作API). 阻塞: ATM排队取款,你只能等待(使用阻塞IO时,Java调用会一直阻塞到读写完成才返回). 非阻塞: 柜台取款,取个号,然后坐在椅子上做其它事,等号广播会通知你办理,没到号你就不能去,你可以不断问大堂经理排到了…
IO 模型 传统 IO读写        磁盘IO主要的延时是由(以15000rpm硬盘为例): 机械转动延时(机械磁盘的主要性能瓶颈,平均为2ms) + 寻址延时(2~3ms) + 块传输延时(一般4k每块,40m/s的传输速度,延时一般为0.1ms) 决定.(平均为5ms) /** * 传统的IO读取 * @param oriStr * @param destStr */ public void customRead(String oriStr,String destStr){ FileIn…
Netty3 源代码分析 - NIO server绑定过程分析      一个框架封装的越好,越利于我们高速的coding.可是却掩盖了非常多的细节和原理.可是源代码可以揭示一切. 服务器端代码在指定好ChannelFactory.设定好选项.而后Bootstrap.bind操作就会开启server.接受对端的连接. 所以有必要对这后面的过程分析清楚,下图是关键流程.先是构建一个默认的Pipeline,为我们接下来要创建的监听通道服务.这个Pipeline里面会增加一个Binder的上行事件处理…
1. 传统IO 由上面图知,传统io需要经过4次copy, 3次状态切换 第一次: 从硬盘 经过 DMA 拷贝 到 kernel buffer (内核buferr) 第二次: 从kernel buffer 经过cpu 拷贝到 user buffer ,比如拷贝到应用程序 第三次: 从user buffer 拷贝到 socket buffer 第四次: 从socket buffer 拷贝到 protocol engine 协议栈 第一次状态切换: 用户态---> 内核状 (或者叫着 用户上下文--…
先看一段经典的WEB JAVA服务器设计 JAVA代码为(伪代码) 1 ServerSocket serverSocket = ...; 2 serverSocket.bind(8899); 3 4 while (true) { 5 final Socket socket = serverSocket.accept(); // 阻塞 6 7 new Thread(new Runnable() { 8 public void run() { 9 socket.getInputStream(); 1…