java nio aio bio概念

时间:2021-06-28 20:08:59   收藏:0   阅读:0

title: java nio aio bio概念
date: 2018/1/13 21:12:55
tags: [nio,aio]
categories:


就目前来说,大多数的系统瓶颈在io , io的瓶颈又在寻址 ……

跑题了,我先来记录总结几个基本概念吧

IO分两阶段:

1.数据准备阶段
2.内核空间复制回用户进程缓冲区阶段

一般来讲:阻塞IO模型、非阻塞IO模型、IO复用模型(select/poll/epoll)、信号驱动IO模型都属于同步IO,因为阶段2是阻塞的(尽管时间很短)。只有异步IO模型是符合POSIX异步IO操作含义的,不管在阶段1还是阶段2都可以干别的事。

阻塞和非阻塞

是进程访问数据的时候,数据是否准备就绪的一种处理方式 。

当数据没有准备好的时候:

同步和异步

基于应用程序操作系统处理io事件所采用的方式

JAVA IO模型

BIO

graph TD Thread((Thread1)) --read-->InputStream1; InputStream1 --io-->Socket1; Thread2((Thread2)) --read-->InputStream2; InputStream2 --io-->Socket2; Thread3((Thread3)) --read-->InputStream3; InputStream3 --io-->Socket3;

JDK1.4以前都是使用的bio

NIO

graph LR; Thread((Thread))--select-->Selector; SocketChannel1--register-selectionkey-->Selector; SocketChannel2--register-selectionkey-->Selector; SocketChannel3--register-selectionkey-->Selector; SocketChannel1--io-->Socket1; SocketChannel2--io-->Socket2; SocketChannel3--io-->Socket3;

New IO,Single thread blocked on selection

阻塞点
Select模式
原理

selector要管理的事情:(所有的io事件)

选择器:当io事件注册给我们的selector时,selector会分配一个key标记它,当io事件完成时通过这个标记来找到相应的管道,然后通过管道来发送和接收数据等操作

数据缓冲区:bytebuffer 提供很多读写方法

重要API:

// Selector
Selector select = Selector.open();
// Server point 
ServerSocketChannel
// client point
SocketChannel 
// 获取io事件keys 
Selectionkey keys = Selector.selectedKeys();

// 注册到selector
channel.register(Selector,SelectedKeys.OP_WRITE)

例子

AIO

小结

Netty

运用在那些领域?

  1. 分布式进程通信
    例如: hadoop、dubbo、akka , rocketmq等具有分布式功能的框架,底层RPC通信都是基于netty实现的
  2. 游戏服务器开发

详细的另外的文章再写吧

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!