Netty 基础认识 (二)

Netty 是一个由JBOSS提供的一个java开源框架,提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序,是一个基于NIO的客户、服务器端编程框架,快速和简单的开发出一个网络应用,例如实现了某种协议的客户、服务端应用, 支持FTP、SMTP、HTTP等各类二进制文本协议java

 

总结以上废话,以及网上各类资料,有如下几点: web

  • Netty提供了 客户端/服务器框架 方便快捷开发的使用 API
  • 并发高 --- NIO(非阻塞IO)
  • 零拷贝 

对于零拷贝,就认为他是提升IO速率、性能的一种技术,后续再继续深刻研究便可算法

 

相对NIO,简单扩展学习一下其余的IO编程

NIO : 同步非阻塞IO , 在等待的同时,还能够作其余的事情,有选择器,缓冲区,双向通道等角色安全

好比现有客户端client1,client2 ... ,还有一个server服务端,当发生通讯的时候,(selector)选择器有本身的轮训算法,当进行通讯,client1注册到selector,出现一个Channel1;client2注册到selector,也会出现一个Channel2,每一个客户端注册selector都会产生一个单独Channel服务器

Channel是一个双向通道,能够进行数据的读写,读写的数据都会到缓冲区(Buffer)websocket

若是Channel1中没有数据,就会直接跳过空数据通道,不等待,继续Channel2网络

selector是一个单线程,消耗低,通常能够处理上万的客户端,客户端的增长,并不会影响他的性能多线程

BIO : 同步阻塞IO , 早期就是排队干事, 后来优化利用线程池配合监听机制,制造出一种伪异步IO并发

AIO : 异步非阻塞IO ,线程发起IO请求,当即返回,不等待消息, 执行内存继续作IO操做,操做完成或者失败,经过调用注册的回调函数通知线程作IO操做完成或者失败

 

Netty 能作什么呢?

高可靠性的网络服务器,优性能的客户端程序应用,网络应用程序,比较协议,还有websocket,后面会用websocket来学习实践

 

若是直接上手NIO的话,须要具有Java多线程的知识,上手也比较困难,不易用,好比遇到网络断点,波动...

相对NIO,实用Netty更容易入手,自定制性比较强,性能很高,好比Dubbo,底层就是Netty

 

Netty 三种线程模型 Reactor

  • 单线程模型: 全部的IO操做都是由同一个NIO线程处理的 ,适合小型应用场景

若是在高负载,高并发场景下,单线程的话,就会比较鸡肋了,即便把机子的CUP都让给他,这样场景下消息的编解码,接收,发送消息等处理,服务器就压力大,好比超时,可能客户端还会进行重试,最后服务器极可能会崩掉

  • 多线程模型: 由一组NIO线程处理IO操做

使用多线程模型,那么不得不想到,利用线程池也作管理调控,后面的读写操做,都由池里的线程处理,这样比单线程模型好不少,那么人再多一点呢,百万级别的呢,Netty也提供了另外一种模型

  • 主从线程模型: 一组线程池接收,一组线程池处理

主线程池 处理客户端的登陆,握手,安全认证等等,在链路创建完成时,将客户端放入从线程池注册,再将请求注册到从线程池,由从线程池处理编解码,读写等操做

该模型大大添加了并发性能处理请求,主从线程模型是官方推荐使用的设计模型

 

以上是简单粗略的学习,继续前进

-------------------------------------------------

相关文章
相关标签/搜索