01-分布式之netty-NIO详解-荀彧 Netty-NIO详解_第1页
01-分布式之netty-NIO详解-荀彧 Netty-NIO详解_第2页
01-分布式之netty-NIO详解-荀彧 Netty-NIO详解_第3页
01-分布式之netty-NIO详解-荀彧 Netty-NIO详解_第4页
01-分布式之netty-NIO详解-荀彧 Netty-NIO详解_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JavaIO与NIO Netty 高性能的网络编程框架 LinuxI O模型介绍 JavaI O JavaNIO 目录 LinuxIO模型 Unix网络编程 UNIX网络编程的经典之作将I O模型划分为以下五种类型 阻塞式I O模型非阻塞式I O模型I O复用信号驱动式I O异步I O LinuxIO流程 LinuxIO流程 等待数据准备好 Waitingforthedatatobeready 从内核向进程复制数据 Copyingthedatafromthekerneltotheprocess 阻塞式I O模型 非阻塞式I O模型 I O复用模型 信号驱动式I O模型 异步I O模型 各种I O模型的比较 同步vs异步 POSIX标准将同步I O和异步I O定义为 同步I O操作 导致请求进程阻塞 直到I O操作完成 异步I O操作 不导致请求进程阻塞 LinuxI O模型介绍 JavaI O JavaNIO 目录 BlockingI O ServerSocketSocket SingleThreadServer MultiThreadServer MultiThreadServer LinuxI O模型介绍 JavaI O JavaNIO 目录 JavaNIO概览 变迁 NIO NewI ONIO1 JSR51JDK1 4引入http jcp org en jsr detail id 051NIO2 JSR203JDK7http jcp org en jsr detail id 203 NIOBuffersChannelsSelectorsNIO2 0UpdateNewFileSystemAPIAsynchronousI O JavaNIO JavaIOvsNIO JavaNIO主要由下面3部分核心组件组成 BufferChannelSelector JavaNIO JavaNIOBuffer一个Buffer本质上是内存中的一块 可以将数据写入这块内存 从这块内存获取数据java nio定义了以下几个Buffer的实现 JavaNIOBuffer JavaNIOBuffer三大核心概念 position limit capacity最好理解的当然是capacity 它代表这个缓冲区的容量 一旦设定就不可以更改 比如capacity为1024的IntBuffer 代表其一次可以存放1024个int类型的值 一旦Buffer的容量达到capacity 需要清空Buffer 才能重新写入值 JavaNIOBuffer 从写操作模式到读操作模式切换的时候 flip position都会归零 这样就可以从头开始读写了 写操作模式下 limit代表的是最大能写入的数据 这个时候limit等于capacity 写结束后 切换到读模式 此时的limit等于Buffer中实际的数据大小 因为Buffer不一定被写满了 JavaNIOBuffer JavaNIOBuffer java nio buffer 缓冲区抽象ByteBuffer理解capacity limit position mark0 mark position limit capacityDirectByteBufferVS non directByteBufferNon directByteBufferHeapByteBuffer 标准的java类维护一份byte 在JVM堆上创建开销小DirectByteBuffer底层存储在非JVM堆上 通过native代码操作 XX MaxDirectMemorySize 创建开销大 JavaNIOBuffer KernelSpace UserSpace 数据发送流程 DirectByteBuffer KernelSpace UserSpace 数据发送流程 HeaptByteBuffer JVMHeap ByteBuffer ByteBuffer 数据发送流程 消息头部 消息体 Buffer创建 1 allocate allocateDirect方法2 wrap方法 Buffer读取 1 put get方法2 flip方法3 mark reset方法4 compact方法5 rewind clear Buffer复制 浅复制 1 duplicate方法2 asReadOnlyBuffer方法3 slice方法 所有的NIO操作始于通道 通道是数据来源或数据写入的目的地 主要地 java nio包中主要实现的以下几个Channel FileChannel 文件通道 用于文件的读和写DatagramChannel 用于UDP连接的接收和发送SocketChannel 把它理解为TCP连接通道 简单理解就是TCP客户端ServerSocketChannel TCP对应的服务端 用于监听某个端口进来的请求 JavaNIOChannel JavaNIOChannel Selector是JavaNIO中的一个组件 用于检查一个或多个NIOChannel的状态是否处于可读 可写如此可以实现单线程管理多个channels 也就是可以管理多个网络链接 JavaNIOSelector Channel Channel Channel Channel Channel Selector 50 1 8 9 10 20 JavaNIOselectors java nio channels Selector支持IO多路复用的抽象实体注册SeletableChannelSelectionKey 表示Selector和被注册的channel之间关系 一份凭证SelectionKey保存channel感兴趣的事件Selector select更新所有就绪的SelectionKey的状态 并返回就绪的channel个数迭代SelectedKey集合并处理就绪channel JavaNIOSelector Select 创建Selector CreatingaSelector Selectorselector Selector open 注册Channel到Selector上 RegisteringChannelswiththeSelector channel configureBlocking false SelectionKeykey channel register selector SelectionKey OP READ SelectionKey OP CONNECTSelectionKey OP ACCEPTSelectionKey OP READSelectionKey OP WRITE register的第二个参数 这个参数是一个 关注集合 代表关注的channel状态 有四种基础类型可供监听 用SelectionKey中的常量表示如下 JavaNIOSelector intselect intselect longtimeout intselectNow 从Selector中选择channel SelectingChannelsviaaSelector 一旦向Selector注册了一个或多个channel后 就可以调用select来获取channelselect方法会返回所有处于就绪状态的channelselect方法具体如下 select 方法的返回值是一个int 代表有多少channel处于就绪了 也就是自上一次select后有多少channel进入就绪 selectedKeys 在调用select并返回了有channel就绪之后 可以通过选中的key集合来获取channel 这个操作通过调用selectedKeys 方法 SetselectedKeys selector selectedKeys JavaNIOSelector SetselectedKeys selector selectedKeys IteratorkeyIterator selectedKeys iterator while keyIterator hasNext SelectionKeykey keyIterator next if key isAcceptable aconnectionwasacceptedbyaServerSocketChannel elseif key isConnectable aconnectionwasestablishedwitharemoteserver elseif key isReadable achannelisreadyforreading elseif key isWritable achannelisreadyforwriting keyIterator remove JavaNIOSelector NIO带来了什么 事件驱动模型避免多线程单线程处理多任务非阻塞IO IO读写不再阻塞 而是返回0基于block的传输 通常比基于流的传输更高效更高级的IO函数 zero copyIO多路复用大大提高了java网络应用的可伸

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论