NIO
M_Joes_18
这个作者很懒,什么都没留下…
展开
-
NIO Buffer
缓冲区 一个 Buffer 其实就是一块内存区域, 我们可以在这个内存区域中进行数据的读写. NIO Buffer 其实是这样的内存块的一个封装, 并提供了一些操作方法让我们能够方便地进行数据的读写. 缓冲区buffer主要是和通道数据交互,即从通道中读入数据到缓冲区,和从缓冲区中把数据写入到通道中,通过这样完成对数据的传输。 所有缓冲区都有4个属性...原创 2018-08-26 20:58:38 · 191 阅读 · 0 评论 -
NIO Dome
服務端public class Server { // 通道管理器 private Selector selector; /** * 启动服务端测试 * * @throws IOException */ public static void main(String[] args) throws IOException...原创 2018-09-01 20:35:16 · 234 阅读 · 0 评论 -
NIO与传统I/O之间I/O的区别
要想讲清楚nio的原理和它的优点得先清楚Java应用程序的文件读写原理和虚拟内存的原理。Java文件读取原理可参见如下图:当应用程序需要读取文件的时候,内核首先通过DMA技术将文件内容从磁盘读入内核中的buffer,然后Java应用进程再从内核的buffer将数据读取到应用程序的buffer。为了提升I/O效率和处理能力,操作系统采用虚拟内存的机制。虚拟内存也就是我们常说的交换内存,它...原创 2018-09-04 12:30:39 · 497 阅读 · 0 评论 -
BIO Dome
服务器public class SocketServer { private static ExecutorService executeService = Executors.newCachedThreadPool(); public static void main(String[] args) throws IOException { //创建soc...原创 2018-09-01 15:25:15 · 178 阅读 · 0 评论 -
NIO SelectionKey
SelectionKey源码:public abstract class SelectionKey { //以下四个常量是定义的通道的四种操作 public static final int OP_READ = 1; public static final int OP_WRITE = 4; public static final int OP_CONNECT = 8; publi...原创 2018-08-30 23:32:26 · 173 阅读 · 0 评论 -
NIO Reactor模型
经典的I/O服务设计 — BIO模式这就是经典的每连接对应一个线程的同步阻塞I/O模式。 流程: ① 服务器端的Server是一个线程,线程中执行一个死循环来阻塞的监听客户端的连接请求和通信。 ②当客户端向服务器端发送一个连接请求后,服务器端的Server会接受客户端的请求,ServerSocket.accept()从阻塞中返回,得到一个与客户端连接相对于的Socket。 ③ ...原创 2018-08-27 22:02:39 · 327 阅读 · 0 评论 -
NIO 阻塞与非阻塞
Socket读写数据底层原理 首先,对于 TCP 通信来说,每个 TCP Socket 在内核中都有一个发送缓冲区和一个接收缓冲区,TCP 的全双工的工作模式及 TCP 的滑动窗口便依赖于这两个独立的 Buffer 及此 Buffer 的填充状态。接收缓冲区把数据缓存入内核,若应用进程一直没有调用 Socket 的 read 方法进行读取的话,则此数据会一直被缓存在接收缓...原创 2018-08-27 21:54:35 · 448 阅读 · 0 评论 -
NIO ByteBuffer
ByteBuffer有三种实现方式:堆内存储数据的 HeapByteBuffer; HeapByteBuffer 是将数据保存在 JVM 堆内存中堆外存储数据的 DirectByteBuffer; DirectByteBuffer 就是采用堆外内存来存放数据的,因此在访问性能提升的同时带来了复杂的动态内存管理问题。而动态内存管理是一项高端编程技术,涵盖了内存分配...原创 2018-08-27 20:44:15 · 170 阅读 · 0 评论 -
NIO Select
使用NIO的一个最大优势就是客户端于服务器自己的不再是阻塞式的,也就意味着服务器无需通过为每个客户端的链接而开启一个线程。而是通过一个叫Selector的轮循器来不断的检测那个Channel有消息处理。 简单来讲,Selector会不断地轮询注册在其上的Channel,如果某个Channel上面有新的TCP连接接入、读和写事件,这个Channel就处于就绪状态,会被Selector...原创 2018-08-26 22:34:37 · 267 阅读 · 0 评论 -
NIO Channel
通道是NIO的一个主要创新,用于在Buffer与通道另一端之间进行有效的数据传输I/O可以分为文件IO和流IO,那么通道对应的就可以分为文件通道(FileChannel)和流通道(流通道就是套接字通道,SocketChannel),所以NIO中有四种通道实现类:FileChannel:文件通道,用于操作文件I/O ServerSocketChannel:服务器套接字通道,用于TCP连...原创 2018-08-26 22:09:03 · 228 阅读 · 0 评论 -
网络编程---I/O模型
一、同步、异步、阻塞、非阻塞常见的分类有以下: 同步阻塞IO 同步非阻塞IO 异步非阻塞IO 阻塞:是否阻塞主要体现在调用的线程是否可以干别的,关注的是程序的等待状态同步:是否同步体现在消息通信机制上 。也就是说同步和异步说的是消息的通知机制,阻塞非阻塞说的是线程的状态 。如果说以上的定义依然无法判别,我们可以从输入操作的两个阶段来看:一般来说,一...原创 2018-09-01 23:21:27 · 399 阅读 · 2 评论