IO与NIO网络编程模型

原创 2018年04月17日 11:30:48

一、BIO(bolcking IO)阻塞分析

阻塞点:

1.创建服务端口

ServerSocket serverSocket=new ServerSocket(12345);

//获取socket套接字

Socket socket=serverSocket.accept();//阻塞等待客户端连接

2.获取客户端输入流

InputStream is=scoket.getInputStream();

byte[] b=new byte[1024];

while(true){

//循环读取数据

int data-=is.read(b);//阻塞等待客户端输入

if(data!=-1){

system.out.println(data);

}else{

break;

}

}


BIO特点:再没有对服务端优化的前提下,1个服务端只能为一个客户端服务(BIO的通讯线程模型)

二、多线程IO


客户端数:线程数=N:N(1:1)

三、伪异步IO

ExecutorService threadPool=Executors.newCachedThreadPool();

特点:不限制线程数量

        客户端数:线程数=N:N

ExecutorService threadPool=Executor.newFixedThreadPool(100);

特点:限制线程数量,线程可以复用

         客户端数据量:线程数量=N:M(N>=M)

四、NIO(non-blocking IO)

new IO

Non Blocking IO(非阻塞同步IO)

jdk1.7以后,出现AIO(真正意义上的异步非阻塞IO)

Non-Blocking重要概念:

1、Selector(通道的管理器)

2、ServerSocketChannel(关心Accept事件)--->ServerSocket(IO)

3、SocketChannel(关心IO事件read|write|read write)--->Socket(IO)

4、SelectionKey(事件集合)

Reactor/多线程


单线程Reactor问题

多路复用IO通过轮询的方式检查是否有事件到来,然后对到来的事件逐一进行响应,如果此时响应提一旦很大,会导致后续的时间得不到处理,最终导致新的事件轮询延后

解决方案:Netty(基于NIO实现,多线程Reactor模型,主从多线程Reactor模型)

Java中网络IO的实现方式-BIO、NIO、AIO

在网络编程中,接触到最多的就是利用Socket进行网络通信开发。在Java中主要是以下三种实现方式BIO、NIO、AIO。 关于这三个概念的辨析以前一直都是好像懂,但是表达的不是很清楚,下面...
  • u010853261
  • u010853261
  • 2017-02-26 13:25:33
  • 571

高性能网络编程必备技能之IO与NIO阻塞分析

  • 2018年03月01日 14:28
  • 201.43MB
  • 下载

Java IO模型&NIO

Java IO模型&NIO Java IO模型NIO 楔子 概述 网络服务 经典的服务设计 经典的SocketServer循环阻塞 可伸缩目标 分而治之 事件驱动设计 背景知识AWT 事件 React...
  • scherrer
  • scherrer
  • 2016-06-01 20:49:00
  • 4126

JAVA-IO模型(BIO,NIO,AIO)

基本概念阻塞和非阻塞 阻塞是进行读写时, 如果当时没有东西可读,或者暂时不可写, 程序就进入等待, 直到有东西可读或者可写为止 非阻塞是如果没有东西可读, 或者不可写, 读写函数马上返回...
  • qq_25872739
  • qq_25872739
  • 2017-03-25 10:01:13
  • 460

Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)

本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解。 1、BIO编程 1.1、传统的BIO编程 网络编程的基本模型是C/S模型,即两个进程间的通信。 服务...
  • anxpp
  • anxpp
  • 2016-05-29 01:46:13
  • 108868

图解java的BI0,NIO,最简单直白的理解同步和异步IO模型

最古老的javaIO通信模式BIO,即阻塞IO,同步调用,性能低: 在服务器端:有专门的客户连接 接收器Acceptor,当有新的客户端连接到达后,Acceptor负责第一步连接,然后给每一个客户端...
  • wu1226419614
  • wu1226419614
  • 2017-03-31 14:31:46
  • 722

Java NIO中的Selector和IO复用

Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。...
  • baidu_22405691
  • baidu_22405691
  • 2015-10-26 13:29:25
  • 1108

unix网络编程------5种IO模型

Unix下的5种I/O模型: 1. 阻塞式I/O 2. 非阻塞式I/O 3. I/O复用(select/poll/epoll) 4. 信号驱动式(SIGIO) 5. 异步I/O(POSIX的aio_系...
  • ywy2090
  • ywy2090
  • 2013-09-26 22:08:38
  • 768

Unix中的I/O模型和Java NIO

Unix网络编程中的五种I/O模型 阻塞式I/0、非阻塞I/O、I/O复用、信号驱动式I/O、异步I/O 以一个网络输入为例,一个输入操作通常包括两个不同的阶段: 等待数据准备好,将数据从内核拷...
  • cauchyweierstrass
  • cauchyweierstrass
  • 2015-12-06 18:47:44
  • 2253

网络io模型&java nio

java nio的全程是 : java new io. 对应着linux kernel5中io模型的多路复用(select/poll,epoll)系统调用。其中netty、mina是java nio的...
  • huyangyamin
  • huyangyamin
  • 2017-01-11 11:32:58
  • 514
收藏助手
不良信息举报
您举报文章:IO与NIO网络编程模型
举报原因:
原因补充:

(最多只允许输入30个字)