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/
相关推荐
-
String s = new String("123");创建了几个String对象?
提要 最近复习看到一道题目很有意思啊: String s = new String("123"); 问这样一行代码创建了几个String对象? 乍一看我其实以为和JDK的版本有关系...
-
AbstractCollection默认集合类
AbstractCollection用于实现基本的Collection结构,提供给普通用户继承使用。也是JDK集合类的父类,部分方法是没有被重载的。 相比Collection接口并...
-
深入理解java虚拟机第三版读书笔记06
附: Java虚拟机规范-Class文件格式:JDK8 Java虚拟机规范-Class文件格式:JDK13 以下是第六章 类文件结构的内容 Class类文件的结构 Class文件是...
-
Java中的四种内部类
我发现最近真是越来越没有东西写了。。。不可能天天学习新知识啊,最近在复习阶段了,复习的东西大多数是博客里写过的/(ㄒoㄒ)/ 复习Java基础的时候认真看了一下Java的内部类,这...
-
深入理解java虚拟机第三版读书笔记02
以下是第二章 Java内存区域与内存溢出异常的内容 运行时数据区域 程序计数器 特点 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。 程序计数器是...
-
JDK8-Stream流库详解
流提供了一种让我们可以在比集合更高的概念级别上指定计算的数据视图。通过使用流,我们可以说明想要完成什么任务,而不是说明如何去实现它。 流的创建 Collection.stream(...
-
为什么说Java只有值传递?
先说一下。。以后可能不会怎么写Java相关的博客了,因为找到了字节跳动的实习工作,用Go/Python开发后端,所以这几天在抓紧时间学Go,在学Go的时候,了解到Go语言只有值传递...
-
Java基础查缺补漏01
某些点会在不远的将来深挖。 >>是逻辑右移,>>>是算术右移 JDK6 可以使用Console.readPassword从控制台中读取密码,用户输入的过程中密码是不可见的。...
-
快速失败(fail-fast)和安全失败(fail-safe)
快速失败 在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出 Concurrent Modification Exception。...