![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
NIO
java硕哥
这个作者很懒,什么都没留下…
展开
-
04 | 事件调度层:为什么 EventLoop 是 Netty 的精髓?
1、单线程模型2、多线程模型3、主从多线程模型4、Netty EventLoop 实现原理4.1、EventLoop 是什么4.2、Netty 如何实现 EventLoop在 Netty 中 EventLoop 可以理解为 Reactor 线程模型的事件处理引擎,每个 EventLoop 线程都维护一个 Selector 选择器和任务队列 taskQueue。它主要负责处理 I/O 事件、普通任务和定时任务。4.3、事件处理机制4.4、任务处理机制4.5、EventLoop 最佳实践.原创 2020-12-24 21:32:56 · 215 阅读 · 0 评论 -
Java BIO 聊天程序
我们使用一个聊天程序来说本文的主题1、BIO 客户端服务器通讯public class ChatServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(9000); while (true) { try { System.out.print原创 2020-12-18 18:35:11 · 191 阅读 · 0 评论 -
一步步Netty的基石 - Reactor模式
Reactor 将不同的事件转发到不同的 “事件处理器” 进行处理(符合:单一职责原则)1、Reactor 流程我们以单个客户端连接为例,介绍一下整个流程。1.1、初始化NIO网络的设置大家需要明白 SelectionKey 中有 Selector和Channel(ServerSocketChannel 或 SocketChannel)的引用,见下图 (关系图有兴趣可以看看):可以通过下面两个方法获取 Selector 和 Channel : SelectableChan原创 2020-10-23 23:06:39 · 151 阅读 · 0 评论 -
JavaNIO编程基础-图解JavaNIO内存模型
1、网络通信基础网络通信就是客户端和服务端发送和接收数据的过程计算机主机通信一个客户端要发起一次网络通信,必须先知道服务端的IP地址,然后 “网络基础设施” 通过 IP 地址将客户端发送的信息传递到 IP 地址对应的主机上。通过 IP 可以找到主机,但将消息发送到主机中的具体应用程序需要通过端口号2、JavaNIO 网络通信上面提到的概念,在Java中都有其对应的抽象比如:1、InetSocketAddress 抽象了IP原创 2020-07-15 19:16:45 · 539 阅读 · 0 评论 -
JavaNIO - Scatter & Gather
Scatter & Gather指在多个缓冲区上实现一个简单的 I/O 操作。减少或避免了Buffer间的拷贝和系统调用。Channel Write操作Write操作Channel Read操作Read操作public class ChannelDemo { public static void main(String[] args) throws IOException { ByteBuffer buffer原创 2020-06-27 23:07:17 · 132 阅读 · 0 评论 -
深入理解NIO - Selector、ServerSocketChannel、SocketChannel底层原理
IO多路复用模型IO多路复用需要OS的支持,IO多路复用模型中,引入了一种新的系统调用,查询IO的就绪状态。在Linux系统中,JavaNIO的Selector#select() 方法对应的系统调用为select/epoll系统调用。通过该系统调用,一个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是内核缓冲区可读/可写),内核能够将就绪的状态返回给应用程序。随后,应用程序根据就绪的状态,进行相应的IO系统调用。目前支持IO多路复用的系统调用,有select、原创 2020-05-22 23:16:46 · 2550 阅读 · 0 评论 -
写给Java程序员看的,CPU 上下文切换、用户态、内核态、进程与线程上下文切换
概述JDK源码中很多Native方法,特别是多线程、NIO部分,很多功能需要操作系统功能支持,作为Java程序员,如果要理解和掌握多线程和NIO等原理,就需要对操作系统的原理有所了解。CPU 上下文切换多任务操作系统中,多于CPU个数的任务同时运行就需要进行任务调度,从而多个任务轮流使用CPU。从用户角度看好像所有的任务同时在运行,实际上是多个任务你运行一会,我运行一会,任务切换的速度很快,我们感觉不到而已。而每个任务运行前,CPU需要知道从哪里加载这个任务的程序,还需要知道从程序哪行开始执行,这原创 2020-05-18 20:03:15 · 3725 阅读 · 11 评论 -
零拷贝实现高效的数据传输 -Efficient data transfer through zero copy
点击参考原文— 1、概述许多Web应用程序提供大量静态内容,相当于从磁盘读取数据原封不动地写回响应套接字。这个操作似乎只需要相对较少的CPU时间,但它的效率有点低:内核从磁盘读取数据,并跨越内核空间 - 用户空间边界,将其推到应用程序,然后应用程序将其写到套接字中。实际上,应用程序充当了一个低效的中介 - 将数据从磁盘文件挪到Socket。每次数据穿越内核空间 - 用户空间边界时,都必须进行复制,这会消耗CPU周期和内存带宽。幸运的是,您可以通过一种称为足够的零拷贝的技术来消除这些副本。使用零拷贝翻译 2020-05-17 22:37:47 · 454 阅读 · 0 评论