Netty高性能框架详解

基于零拷贝技术,采取IO多用复用技术

基于reactor设计模型

netty实际是对java的NIO的一次封装

JAVA NIO主要有三大核心部分:Channel(通道),Buffer(缓冲区), Selector。传统IO基于字节流和字符流进行操作,而NIO基于Channel和Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择区)用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个线程可以监听多个数据通道。

NIO和传统IO(一下简称IO)之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的

IO的各种流是阻塞的。这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了。 NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取。而不是保持线程阻塞,所以直至数据变得可以读取之前,该线程可以继续做其他的事情。 非阻塞写也是如此。一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程同时可以去做别的事情。 线程通常将非阻塞IO的空闲时间用于在其它通道上执行IO操作,所以一个单独的线程现在可以管理多个输入和输出通道(channel)。

Channel

首先说一下Channel,国内大多翻译成“通道”。Channel和IO中的Stream(流)是差不多一个等级的。只不过Stream是单向的,譬如:InputStream, OutputStream.而Channel是双向的,既可以用来进行读操作,又可以用来进行写操作。

NIO中的Channel的主要实现有:

FileChannel

DatagramChannel

SocketChannel

ServerSocketChannel

作者:|一见飘红|,原文链接: http://www.imooc.com/article/325532

文章推荐

如何搭建一个vue项目

ET框架6.0分析二、异步编程

Java设计模式-建造者模式

谈谈selenium中的clear后输入内容异常的处理

红黑树的由来及其底层原理

XSS(Cross Site Scripting)跨站脚本攻击

重学c#系列—— explicit、implicit与operator[三十四]

如何通过Java更改Word中的页面大小和页面方向

一文快速回顾 Java 操作数据库的方式-JDBC

idea 调试小心得

HTTP面试题 - HTTP2 面试题

【可视化分析案例】用python分析B站Top100排行榜数据