BIO模型存在三个socket:
ServerSocket:专门用来监听是否有来自客户端的连接
accept返回的Socket:专门用于处理客户端请求的socket
Socket:客户端的socket
BIO由于accpet和read会阻塞,如果不使用多线程,read时候的阻塞会导致无法立即处理下一个客户端的连接。
如果使用多线程,如果某些线程不活跃,可能浪费CPU资源。
NIO可以设置通过configureBlocking设置accept为非阻塞的,对应操作系统五种IO模型介绍中的非阻塞IO模型。
NIO在感知各个连接的读写状态是通过操作系统内核轮询实现的。对应操作系统五种IO模型介绍中的多路复用IO模型。
在linux中,性能会更高一些,linux内核通过内核函数epoll实现被动感知,能有效解决多个连接不活跃的问题。
epoll的原理:
epoll原理详解及epoll反应堆模型_青萍之末的博客-CSDN博客
(就这样水了一篇博客)
原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/nio%e5%ba%95%e5%b1%82%e5%8e%9f%e7%90%86-epoll/
相关推荐
-
深入理解java虚拟机第三版读书笔记04
以下是第三章 垃圾收集器与内存分配策略的内容 概述 程序计数器、虚拟机栈、本地方法栈是线程独有的,栈帧更是随方法结束而消亡,不需要垃圾回收。而堆和方法区则需要经过垃圾回收的设计 对...
-
Servlet4.0初识总结
JavaEE8 JavaEE8,是自2013年6月Java企业版的首次更新。JAVAEE8提供了一些新的API,提供了对HTTP/2的新支持。 Servlet4.0 Servlet...
-
ThreadPoolExecutor源码分析-线程池如何实现线程复用?
线程的复用问题 在开始看线程池的源码之前,先来看这么一个问题: 一个Thread对象可以重复地调用start()方法吗? 试试就知道了: @Test public void tes...
-
LinkedHashMap源码分析
总结 总结放前面防止太长不看: LinkedHashMap继承自HashMap,为Entry额外维护了两个属性:before和after,可以按照节点的插入顺序或者访问顺序为Ent...
-
深入理解java虚拟机第三版读书笔记09
续深入理解java虚拟机第三版读书笔记08 类加载器 通过一个类的全限定名来获取描述该类的二进制字节流称为类加载器。类加载器可以用户自定义,是java语言流行的一项原因 类与类加载...
-
Java基础查缺补漏01
某些点会在不远的将来深挖。 >>是逻辑右移,>>>是算术右移 JDK6 可以使用Console.readPassword从控制台中读取密码,用户输入的过程中密码是不可见的。...
-
Java基础查缺补漏04
继续我的复习刷题 接口方法可以使用abstract修饰 问题: java接口的方法修饰符可以为?(忽略内部接口) A. privateB. protectedC. finalD. ...
-
深入理解java虚拟机第三版读书笔记07
附: Java虚拟机规范-Java虚拟机指令集:JDK8 Java虚拟机规范-Java虚拟机指令集:JDK13 续深入理解java虚拟机第三版读书笔记06 字节码指令简介 Java...
-
CAS应用之JUC下的原子类
原子整数 AtomicInteger i = new AtomicInteger(0); // 获取并自增(i = 0, 结果 i = 1, 返回 0),类似于 i++ Syste...
-
NIO零拷贝与其系统函数调用
本文参考资源: Java NIO学习笔记四(零拷贝详解)Java拿笔小星的博客-CSDN博客 关于Buffer和Channel的注意事项和细节 ByteBuffer不止可以存取by...