阅读yanf4j源码对于read事件、write事件的笔记
CPU大量的无效循环-写事件:
只要 TCP 连接适合数据写入时就会产生 OP_WRITE 事件,基本上 95% 以上的时间都会产生 OP_WRITE 事件。
由于很多时间都会产生 OP_WRITE 事件,一开始就注册的话会对服务器产生严重的性能损耗,过多的循环会导致 CPU 利用率骤增。
一般来说,如果没有数据写入时不要注册 OP_WRITE,只在有数据要写入时再去注册,写完后就注销 OP_WRITE 事件.
一般只注册 read 事件,在有数据写入的时间再注册 write 事件,写完后再改为 read 事件(取消write事件)。
如果没有数据写入时也注册 write 事件的话,那会产生很差的性能(大量的无效循环)。
有一些 NIO 框架就很少注册 OP_WRITE 事件的,直接写入,如果不适合时就会产生阻塞直到能写为止。
OP_WRITE 比 OP_READ 等事件处理麻烦很多,一不小心就会对性能产生严重的影响。
socket空闲时,即为可写.有数据来时,可读.
对于nio的写事件,只在发送数据时,如果因为通道的阻塞,暂时不能全部发送,才注册写事件key.interestOps(key.interestOps() | SelectionKey.OP_WRITE);
。等通道可写时,再写入。同时判断是否写完,如果写完,就取消写事件即可key.interestOps(key.interestOps() & ~SelectionKey.OP_WRITE);。
空闲状态下,所有的通道都是可写的,如果你给每个通道注册了写事件,那么肯定是死循环了
基本上有 99% 的时间都是可写的,在多selector架构的情况下在处理 read事件的时候需要取消 key.interestOps(key.interestOps() | SelectionKey.OP_READ),
处理完成之后再重新注册read事件。
分享到:
相关推荐
### Java NIO网络编程核心知识点解析 #### 非阻塞式Socket通信:Java NIO的革命性突破 从JDK 1.4版本开始,Java引入了NIO(Non-blocking I/O)API,这标志着Java网络编程的一个重大转折点。传统上,基于阻塞I/O的...
### Java网络编程NIO视频教程知识点汇总 #### 1. Java NIO-课程简介 - **主要内容**:简述...通过以上内容的学习,开发者可以全面掌握Java NIO编程的相关技术和最佳实践,为开发高性能网络应用程序打下坚实的基础。
书中可能涵盖以下几个关键知识点: 1. **通道(Channels)**:NIO中的通道类似于传统IO中的流,但它们可以同时读写数据,并且是非阻塞的。例如,FileChannel用于文件操作,SocketChannel用于网络通信。 2. **缓冲...
以上知识点构成了Java网络编程的基础,通过学习和实践,开发者可以创建出高效、安全的网络应用程序。提供的《Java网络编程实例》将可能包含这些概念的具体代码示例,帮助读者更好地理解和掌握相关技术。阅读和分析...
在这个"NIO.rar_NIO_java nio"的源码中,我们可以看到以下几个关键知识点: 1. **通道(Channel)**:Channel是数据传输的载体,它可以是文件、套接字、网络等。Java NIO提供了多种类型的通道,如FileChannel用于文件...
理解Java NIO中的`ByteBuffer`涉及以下关键知识点: 1. **通道(Channels)**:通道是数据的来源或目的地,如文件通道、套接字通道等。它们可以与缓冲区交互,读取或写入数据。 2. **选择器(Selectors)**:选择...
这份复习资料可以帮助学生全面掌握Java网络编程的关键点,通过解答题库中的题目,可以巩固理论知识,提高实战技能。同时,提供的答案可以帮助自我评估和查漏补缺。对于准备期末考试的学生来说,这是一份非常宝贵的...
以下是Java NIO在Socket通信中的关键知识点: 1. **通道(Channel)**:通道类似于流,但有以下特点: - 可读可写:通道既可以用于读取数据,也可以用于写入数据。 - 多路复用:一个通道可以同时关联多个数据源或...
Java网络编程是开发分布式应用程序的关键技术,它使得Java程序能够与其他设备、系统和服务进行通信。本书《Java网络编程实例:Java网络编程实例》显然聚焦于通过实际案例来教授这一核心技能。以下是一些主要的知识点...
《JAVA网络编程大全》是一本全面且深入介绍Java网络编程技术的权威著作,旨在帮助读者掌握Java在构建网络应用程序中的核心概念和实践技巧...深入学习并实践书中的知识点,将有助于提升你在Java网络编程领域的专业技能。
以下是基于该书源码的一些关键知识点的详细解析: 1. **Java Socket编程**:Java通过Socket类实现了TCP/IP通信,Socket是网络通信的基本单元,用于建立客户端和服务器端的连接。在源码中,你会看到如何创建...
以下是本书中涉及的一些关键知识点: 1. **Java网络编程基础**:首先,书中会介绍Java中的Socket编程,包括TCP和UDP协议的基础知识,以及如何使用Java的Socket和ServerSocket类创建客户端和服务器端的连接。 2. **...
Java NIO,全称为Non-Blocking Input/Output,是Java平台...以上就是关于Java NIO的一些核心知识点,通过学习这两本《Java NIO》的中文和英文版书籍,你可以深入理解并掌握这一关键的Java技术,提升你的程序设计能力。
使用Java NIO进行异步通信编程时,需要关注以下关键点: 1. **缓冲区管理**:正确地使用和管理缓冲区是NIO的关键。理解如何填充、清空和反转缓冲区,以及如何在通道之间复制数据。 2. **选择器的使用**:学会配置...