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/
相关推荐
-
HashMap源码分析
HashMap是java中非常常见的一个数据结构,在这篇文章里,我依然以Map中的操作为导向来循序渐进研究HashMap中的源码,阅读这篇文章需要的前置知识有: 弱平衡的二叉查找树...
-
NIO、BIO模型对比实现文件的复制
NIO特点 使用Channel代替Stream,是双向的 使用Selector监控多条Channel 可以在一个线程里处理多个Channel I/O Channel和Buffer ...
-
LinkedList源码分析
相关文章:ArrayList源码分析 List家族一览: LinkedList简介 LinkedList的超类有List、Queue,说明它既有List的性质也有Queue的性质,...
-
深入理解java虚拟机第三版读书笔记06
附: Java虚拟机规范-Class文件格式:JDK8 Java虚拟机规范-Class文件格式:JDK13 以下是第六章 类文件结构的内容 Class类文件的结构 Class文件是...
-
遗留线程安全类Vector和HashTable简要源码分析
总结 总结放前面防止太长不看 Vector Vector就是使用synchronized限制线程安全的一个List实现。 Vector是基于数组实现的,默认初始容量是10,在构造的...
-
深入理解java虚拟机第三版读书笔记09
续深入理解java虚拟机第三版读书笔记08 类加载器 通过一个类的全限定名来获取描述该类的二进制字节流称为类加载器。类加载器可以用户自定义,是java语言流行的一项原因 类与类加载...
-
AbstractCollection默认集合类
AbstractCollection用于实现基本的Collection结构,提供给普通用户继承使用。也是JDK集合类的父类,部分方法是没有被重载的。 相比Collection接口并...
-
NIO网络编程之Selector介绍
Selector 要实现异步IO要通过Selector,甚至我们可以通过一个线程管理多个Channel的读写,这是NIO相较BIO的优越之处之一。 Channel可以注册到一个Se...
-
Java日志框架JUL和Log4j介绍
日志文件是用于记录系统操作事件的文件集合,可分为事件日志和消息日志。具有处理历史数据、诊断问题的追踪以及理解系统的活动等重要作用。 日志实现:JUL、logback、log4j、l...