
IO
森林屿麓
这个作者很懒,什么都没留下…
展开
-
java NIO代码示例
服务端:package cn.nio;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.ni转载 2017-09-04 20:14:05 · 718 阅读 · 0 评论 -
Java NIO——Zero-copy
相关文章java nio是如何实现零拷贝(zero-copy)的技术介绍零复制(英语:Zero-copy;也译零拷贝)技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域,从而可以减少上下文切换及CPU的拷贝时间,通常用于通过网络传输文件时节省CPU周期和内存带宽。假如我们要实现这样的功能:将文件中的字节复制到套接字中read(file, tmp_buf...原创 2019-07-06 13:26:12 · 743 阅读 · 0 评论 -
java nio 多路复用系统调用函数
select比epoll效率差的原因:select是轮询,epoll是触发式的,所以效率高。Select:1.Socket数量限制:该模式可操作的Socket数由FD_SETSIZE决定,内核默认32*32=1024.2.操作限制:通过遍历FD_SETSIZE(1024)个Socket来完成调度,不管哪个Socket是活跃的,都遍历一遍.Poll:1.Socket数量几乎无限制...原创 2019-07-13 10:56:20 · 602 阅读 · 0 评论 -
NIO中Buffer与Channel搭配使用原理
Channel:用于源节点与目标节点之间的连接。在Java NIO中,负责缓冲区中数据传输,Channel本身不存储数据,因此需要配合缓冲区进行传输。在NIO中,使用通道(Channel)基于缓冲区数据块的读写。BufferByteBufferCharBufferDoubleBuffer...主要介绍一下ByteBufferByteBuffer继承于Buffer类,ByteBu...原创 2019-05-24 22:36:08 · 737 阅读 · 0 评论 -
NIO同步、非阻塞、基于selector的异步处理理解
java nio的io模型是同步非阻塞,这里的同步异步指的是真正io操作(数据内核态用户态的拷贝)是否需要进程参与。而说java nio提供了异步处理,这个异步应该是指编程模型上的异步。基于reactor模式的事件驱动,事件处理器的注册和处理器的执行是异步的。JAVA NIO是同步非阻塞io。同步和异步说的是消息的通知机制,阻塞非阻塞说的是线程的状态 。下面说说我的理解,client和服...原创 2019-02-13 12:16:10 · 819 阅读 · 1 评论 -
常见IO模型详解
服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:同步阻塞IO(Blocking IO):即传统的IO模型。 同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非Java的NIO(New IO)库。 IO多路复用(IO Multiplexing):即经典的Reactor...转载 2019-02-14 16:18:27 · 1265 阅读 · 0 评论 -
Netty异步非阻塞事件驱动及组件原理详解
本文基于 Netty 4.1 展开介绍相关理论模型,使用场景,基本组件、整体架构,知其然且知其所以然,希望给大家在实际开发实践、学习开源项目方面提供参考。Netty 是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。JDK 原生 NIO 程序的问题JDK 原生也有一套网络应用程序 API,但是存在一系列问题,主要如下:NIO 的类库和 API 繁杂...转载 2018-11-20 12:16:12 · 3628 阅读 · 1 评论 -
netty 常规option配置总结
ServerBootstrap b = new ServerBootstrap();b.option(ChannelOption.SO_BACKLOG, Integer.valueOf(1024));服务器端TCP内核模块维护有2个队列,我们称之为A,B吧,客户端向服务端connect的时候,发送带有SYN标志的包(第一次握手),服务端收到客户端发来的SYN时,向客户端发送SYN AC...原创 2018-11-20 10:11:54 · 4526 阅读 · 1 评论 -
java NIO同步非阻塞
NIO服务器端如何实现非阻塞?服务器上所有Channel需要向Selector注册,而Selector则负责监视这些Socket的IO状态(观察者),当其中任意一个或者多个Channel具有可用的IO操作时,该Selector的select()方法将会返回大于0的整数,该整数值就表示该Selector上有多少个Channel具有可用的IO操作,并提供了selectedKeys()方法来返回这些C...原创 2018-11-19 16:55:40 · 302 阅读 · 0 评论 -
java nio及操作系统底层原理同步异步阻塞与非阻塞
目录IO基本概念同步,异步,阻塞,非阻塞同步与异步阻塞与非阻塞IO模型(Reference Link)阻塞I/O模型非阻塞I/O模型进程把一个套接口设置成非阻塞是在通知内核:当所请求的I/O操作不能满足要求时候,不把本进程投入睡眠,而是返回一个错误。也就是说当数据没有到达时并不等待,而是以一个错误返回。I/O复用模型异步I/O模型 AIO,BIO...转载 2018-11-19 15:56:18 · 2324 阅读 · 0 评论 -
java IO 模型 阻塞/非阻塞 同步/异步
.什么是阻塞IO?什么是非阻塞IO?在了解阻塞IO和非阻塞IO之前,先看下一个具体的IO操作过程是怎么进行的。通常来说,IO操作包括:对硬盘的读写、对socket的读写以及外设的读写。当用户线程发起一个IO请求操作(本文以读请求操作为例),内核会去查看要读取的数据是否就绪,对于阻塞IO来说,如果数据没有就绪,则会一直在那等待,直到数据就绪;对于非阻塞IO来说,如果数据没有就转载 2017-09-02 20:03:45 · 617 阅读 · 0 评论 -
Netty——LengthFieldBasedFrameDecoder
先看看LengthFieldBasedFrameDecoder的官方API http://docs.jboss.org/netty/3.1/api/org/jboss/netty/handler/codec/frame/LengthFieldBasedFrameDecoder.html API举例说明了LengthFieldBasedFrameDecoder的解析机制,如下:转载 2017-09-17 16:44:00 · 366 阅读 · 0 评论 -
netty——LengthFieldBasedFrameDecoder实例(解决半包)
1,使用LengthFieldPrepender编码,LengthFieldBasedFrameDecoder解码的netty传输可以解决半包粘包2 代码部分tcpserver[java] view plain copy print?package com.bimatrix.revit.nettyTest; impo转载 2017-09-17 16:42:34 · 3928 阅读 · 0 评论 -
Java NIO使用及原理分析 (四)
在上一篇文章中介绍了关于缓冲区的一些细节内容,现在终于可以进入NIO中最有意思的部分非阻塞I/O。通常在进行同步I/O操作时,如果读取数据,代码会阻塞直至有 可供读取的数据。同样,写入调用将会阻塞直至数据能够写入。传统的Server/Client模式会基于TPR(Thread per Request),服务器会为每个客户端请求建立一个线程,由该线程单独负责处理一个客户请求。这种模式带来的一个问题就转载 2017-09-04 20:20:45 · 173 阅读 · 0 评论 -
Java NIO使用及原理分析 (三)
在上一篇文章中介绍了缓冲区内部对于状态变化的跟踪机制,而对于NIO中缓冲区来说,还有很多的内容值的学习,如缓冲区的分片与数据共享,只读缓冲区等。在本文中我们来看一下缓冲区一些更细节的内容。缓冲区的分配在前面的几个例子中,我们已经看过了,在创建一个缓冲区对象时,会调用静态方法allocate()来指定缓冲区的容量,其实调用 allocate()相当于创建了一个指定大小的数组,并把它包转载 2017-09-04 20:19:43 · 139 阅读 · 0 评论 -
Java NIO使用及原理分析(二)
在第一篇中,我们介绍了NIO中的两个核心对象:缓冲区和通道,在谈到缓冲区时,我们说缓冲区对象本质上是一个数组,但它其实是一个特殊的数组,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况,如果我们使用get()方法从缓冲区获取数据或者使用put()方法把数据写入缓冲区,都会引起缓冲区状态的变化。本文为NIO使用及原理分析的第二篇,将会分析NIO中的Buffer对象。在缓冲区中,最转载 2017-09-04 20:18:29 · 171 阅读 · 0 评论 -
Java NIO使用及原理分析 (一)
在Java1.4之前的I/O系统中,提供的都是面向流的I/O系统,系统一次一个字节地处理数据,一个输入流产生一个字节的数据,一个输出流消费一个字节的数据,面向流的I/O速度非常慢,而在Java 1.4中推出了NIO,这是一个面向块的I/O系统,系统以块的方式处理处理,每一个操作在一步中产生或者消费一个数据库,按块处理要比按字节处理数据快的多。在NIO中有几个核心对象需要掌握:缓冲区(Buf转载 2017-09-04 20:17:21 · 177 阅读 · 0 评论 -
java nio是如何实现零拷贝(zero-copy)的
首先了解关于zero-copy相关的知识点java nio是如何实现zero-copy的在上一篇文章中简单介绍了zero-copy的相关知识,提到了mmap内存直接映射方式,这种方式介于sendfile系统调用与传统IO之间,其中一个重要原因是sendfile完全在内核空间中完成的,这对于应用程序来说就无法对数据进行操作,也由此,javaNIO是基于mmap内存映射的方式来实现零拷贝的。...原创 2019-07-06 23:54:38 · 4490 阅读 · 0 评论