
IO
文章平均质量分 65
IO详解
芒骁
用代码改变世界
展开
-
ServerSocketChannelImpl
private static NativeDispatcher nd; private final FileDescriptor fd; private int fdVal; private volatile long thread = 0L; private final Object lock = new Object(); private final Object stateLock = new Object(); private static...原创 2021-12-27 18:18:41 · 210 阅读 · 0 评论 -
NIO示例
服务端package com.mang.NIO.nsync;import java.io.IOException;import java.io.PrintStream;import java.net.InetAddress;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.nio.channels.SelectionKey;import.原创 2022-07-26 16:52:29 · 150 阅读 · 0 评论 -
NIO this.selector.select()
重点:最后执行SelectorImpl.doSelect,在windows平台由WindowsSelectorImpl实现一个个来分析原创 2022-07-26 16:51:10 · 586 阅读 · 0 评论 -
NIO总结文——一篇读懂NIO整个流程
服务器的工作selector的准备工作1.1 这里以windows平台为例会初始化一个WindowsSelectorImplServerSocketChannel的准备工作2.1向selector注册该ServerSocketChannel3.1 会执行 Selector.register方法,首先在WindowsSelectorImpl的父类SelectorImpl创建一个SelectionsKeyImpl对象,参与到之后的整个注册过程3.2 继续执行WindowsSelecto原创 2022-07-26 16:48:30 · 814 阅读 · 2 评论 -
网络IO总结文
啊啊原创 2022-05-13 22:04:33 · 872 阅读 · 0 评论 -
NIO select() >0—— 处理到来的事件!
accept事件在Channel向Selector注册的时候创建了对应该Channel的SelectionKeysImpl,这时初始化的感兴趣事件就是该OP_ACCEPT,在进行第一步判断 if (key.isAcceptable()) { 此时的SelectionsKey感兴趣的事件就是OP_ACCEPT。执行scc.accept得到SocketChannel。......原创 2022-02-16 10:44:14 · 221 阅读 · 0 评论 -
I/O多路复用模型 select
select 系统调用的的用途是:在一段指定的时间内,监听用户感兴趣的文件描述符上可读、可写和异常等事件。select实现I/O多路复用模型转载 2022-01-11 15:53:11 · 366 阅读 · 0 评论 -
WindowsSelectorImpl——FdMap
之前讲到,Channel注册到Selector,Selector如何实现接收到对应的事件去通知对应的Channel呢?当然是要底层落地实现的,我们以windows平台实现类WindowsSelectorImpl为例在向Selector注册Channel时,有这样一条语句:this,fdMap.put(var1) 其实就是将......原创 2022-01-10 10:55:11 · 143 阅读 · 0 评论 -
WindowsSelectorImpl——pollArrayWrapper
class PollArrayWrapper { //用户存储文件描述符数组的native空间 private AllocatedNativeObject pollArray; //上述内存空间的地址 long pollArrayAddress; //每条记录所占空间大小为8个字节 static short SIZE_POLLFD = 8; //每条记录中文件描述符的相对起始偏移量 private static final short FD_OFF.原创 2022-01-08 16:54:03 · 195 阅读 · 0 评论 -
WindowsSelectorImpl
构造函数原创 2022-01-07 11:35:50 · 578 阅读 · 0 评论 -
I/O前言
I/O有内存I/O、网络I/O和磁盘I/O三种,通常我们说的I/O指的是后两者。如下图所示是I/O通信过程的调度示意。五种I/O通信模型如果想要提高I/O效率,需要将等待时间降低。因此发展出来五种I/O模型,分别是:阻塞I/O模型、非阻塞I/O模型、多路复用I/O模型、信号驱动I/O模型、异步I/O模型。其中,前四种被称为同步I/O,下面对每一种I/O模型进行详细分析。......转载 2022-01-05 11:35:25 · 78 阅读 · 0 评论 -
BIO实现
传统javaIO,在最基础的实现基础上实现多线程服务端public class TcpReceive { public static void main(String[] args) throws IOException { ServerSocket ss = new ServerSocket(7878); Socket accept = ss.accept(); InputStream input = accept.getInputStream(原创 2022-01-05 11:40:29 · 168 阅读 · 0 评论 -
BIO ServerSocket.accept()等待客户端请求
implAccept(s)做了几件事:1. 为Socket对象创建Impl对象,和ServerSocket的Impl属性创建过程一样2. 执行ServerSocket.Impl.accept,也就是SocksSocketImpl,之后的过程其实也能想到,还是调用DualStackPlainSocketImpl 实现accept执行impl.accept(delegate),这里的impl和delegate都是DualStackPlainSocketImpl,暂时没明白为什么要复制一个del.原创 2022-01-05 16:25:41 · 510 阅读 · 0 评论 -
ServerSocket构造函数源码分析
总结:(1) 创建SocketImpl并设置为ServerSocket属性 /** * Create a server with the specified port, listen backlog, and * local IP address to bind to. The <i>bindAddr</i> argument * can be used on a multi-homed host for a ServerSocket tha原创 2022-01-05 15:46:28 · 516 阅读 · 0 评论 -
NIO 服务端准备工作
服务器总结步骤: 创建Selector创建Selectorimport java.io.IOException;import java.io.PrintStream;import java.net.InetAddress;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.nio.channels.SelectionKey;impor原创 2022-01-06 18:11:10 · 317 阅读 · 0 评论 -
NIO组件 Net
bind 方法和BIO比较一下原创 2022-01-06 18:12:04 · 191 阅读 · 0 评论 -
NIO 向Selector注册Channel
执行ServerSocketChannelImpl.register(),入参为selector(这里是WindowsSelectorImpl)和selector需要关注的事件,这里是SelectionKey.OP_ACCEPT,其实就是一个数字先执行SelectableChannel的register再执行AbstractSelectableChannel的register SelectionKey k = findKey(sel);......原创 2022-01-06 18:10:57 · 274 阅读 · 0 评论 -
(NIO)ServerSocket发功之处
1. this.serverSocketChannel.socket()其实就是将ServerSocketChannelImpl作为入参创建了一个ServerSocketAdaptor(ServerSocket的子类),ServerSocketChannelImpl对象是它的属性设置ServerSocketChannelImpl对象作为它的属性因为父类构造函数的优先级,所以又回到ServerSocket构造函数,看看,你NIO再怎么优秀也还是要用我BIO的那一套工具通信。2. Serve.原创 2022-01-06 16:59:52 · 255 阅读 · 0 评论 -
NIO 非阻塞的实现
AbstractSelectableChannel 具有 blocking属性,默认是true,即NIO默认是阻塞的,需要设置非阻塞。通过SeverSocketChannelImpl.implConfigureBlocking实现。最后通过本地方法实现看看windows是如何实现的之后如果有机会把操作系统源码撸一遍,再细说其中奥妙。这里我们能看到会把Channel的blocking字段设置为false......原创 2022-01-06 17:47:05 · 578 阅读 · 0 评论