![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【Netty】
天青色的烟雨.
本博客只为加深自身知识体系,不为任何商业用途呦呦呦!
展开
-
BIO、NIO、AIO通信机制理解
阻塞、非阻塞(相对数据而言):概念:程序等待调用结果时的状态。进程访问数据的时候,数据是否就绪的一种处理状态。 解释:涉及到CPU线程调度;所谓阻塞,就是调用结果返回之前,该执行线程会被挂起,不释放CPU执行权,线程不能做其它事情,只能等待,只有等到调用结果返回了,才能接着往下执行;所谓非阻塞,就是在没有获取调用结果时,不是一直等待。同步、异步:概念:消息的通知机制 解释:涉及到IO...原创 2019-04-21 18:56:52 · 699 阅读 · 0 评论 -
IO多路复用三种机制Select,Poll,Epoll
I/O多路复用(multiplexing)的本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作。select、poll 和 epoll 都是 Linux API 提供的 IO 复用方式。相信大家都了解了Unix五种IO模型,不了解的可以[1] blocking IO ...转载 2019-07-16 22:14:52 · 313 阅读 · 0 评论 -
TCP粘包和拆包、编码解码器
在进行Netty学习时,发现,如果客户端连续不断的向服务端发送数据包时,服务端接收的数据会出现两个数据包粘在一起的情况,这就是TCP协议中经常会遇到的粘包以及拆包的问题。 我们都知道TCP属于传输层的协议,传输层除了有TCP协议外还有UDP协议。那么UDP是否会发生粘包或拆包的现象呢?答案是不会。UDP是基于报文发送的,从UDP的帧结构可以看出,在UDP首部采用了...原创 2019-04-30 17:30:50 · 2078 阅读 · 0 评论 -
通信传输模式、ByteBuf
1、选择合适的内置通信传输模式 NIO: io.netty.channel.socket.nio 使用java.nio.channels 包作为基础——基于选择器的方式。这个是JDK考虑到所有操作系统所做出的妥协。 Epoll(仅Linux):io.netty.channel.epoll 由 JNI 驱动的 epoll()和非阻塞 IO。这个传输支持只有在Linux 上可用的多种特...原创 2019-04-30 11:59:25 · 389 阅读 · 0 评论 -
Channel、EventLoop、ChannelFuture
Channel、EventLoop(Group) 和ChannelFutureChannel—Socket; ChannelFuture—异步通知。 EventLoop—控制、多线程处理、并发;关系图:关系说明一个EventLoopGroup 包含一个或者多个EventLoop; 一个EventLoop 在它的生命周期内只和一个Thread 绑定; 所有由EventLo...原创 2019-04-30 10:39:49 · 715 阅读 · 0 评论 -
Netty之Reactor模式
1. 单线程模型Reactor单线程模型,指的是所有的IO操作都在同一个NIO线程上面完成,NIO线程的职责如下:1)作为NIO服务端,接收客户端的TCP连接; 2)作为NIO客户端,向服务端发起TCP连接; 3)读取通信对端的请求或者应答消息; 4)向通信对端发送消息请求或者应答消息。Reactor单线程模型示意图如下所示:单线程Reactor模式流程: 服务器端...原创 2019-04-30 09:22:50 · 244 阅读 · 0 评论 -
NIO开发流程
NIO原理剖析Java原生NIO开发大致流程:第一步,绑定一个服务的端口 这与传统阻塞IO中的ServerSocket类似,没什么好说的第二步,打开通道管理器Selector并在Selector上注册一个事件 当注册的事件发生时,Selector.select()会返回,否则一直阻塞。这一步很有意思,也是NIO第一个与传统IO不同的地方,NIO通过一个...转载 2019-08-04 16:58:17 · 674 阅读 · 0 评论 -
NIO之Channel、Selector
ChannelJavaNIO Channels和流有一些相似,但是又有些不同:你可以同时读和写Channels,流Stream只支持单向的读或写(InputStream/OutputStream) Channels可以异步的读和写,流Stream是同步的 Channels总是读取到buffer或者从buffer中写入下面分别介绍一下Channel最重要的一些实现类:FileCha...原创 2019-04-27 21:44:01 · 613 阅读 · 0 评论 -
NIO之Buffer基本原理
在Java NIO中各类Buffer主要用于和NIO Channel进行交互,数据从Channel中读取到Buffer中,从Buffer写入到Channel中。channel-buffer数据交互我们可以将Buffer看做内存中的一块区域,我们可以在这块区域上写数据,然后在从中读取。这块内存区域被包装成NIO Buffer对象,提供了一系列的方法使我们操作这块内存变得更简单一些。Bu...转载 2019-04-27 20:55:56 · 333 阅读 · 0 评论 -
ByteBuf 的零拷贝(Zero Copy)
所谓的 Zero-copy, 就是在操作数据时, 不需要将数据 buffer 从一个内存区域拷贝到另一个内存区域. 因为少了一次内存的拷贝, 因此 CPU 的效率就得到的提升. 在 OS 层面上的 Zero-copy 通常指避免在 用户态(User-space) 与 内核态(Kernel-space) 之间来回拷贝数据. 例如 Linux 提供的 mmap 系统调用, 它...转载 2019-08-06 17:56:39 · 476 阅读 · 0 评论