IO与NIO网络编程模型

一、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模型)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值