博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Netty 基础认识 (二)
阅读量:6949 次
发布时间:2019-06-27

本文共 1504 字,大约阅读时间需要 5 分钟。

hot3.png

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

 

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

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

对于零拷贝,就认为他是提高IO速率、性能的一种技术,后续再继续深入研究即可

 

相对NIO,简单扩展学习一下其他的IO

NIO : 同步非阻塞IO , 在等待的同时,还可以做其他的事情,有选择器,缓冲区,双向通道等角色

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

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

如果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也提供了另一种模型

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

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

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

 

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

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

转载于:https://my.oschina.net/u/3829444/blog/2989915

你可能感兴趣的文章
点餐系统最终话--第三次冲刺
查看>>
attachEvent和addEventListener
查看>>
vmware中redhat忘记root密码
查看>>
LINUX 配置SVN
查看>>
怎样设计一个好的数据库
查看>>
go源码分析:strings包
查看>>
Min_25筛学习笔记
查看>>
错误分析:程序集未标记为可序列化
查看>>
禅与文件和文件夹组织的艺术 —— 上
查看>>
Linux自带-系统级性能分析工具 — Perf(转)
查看>>
[HNOI2010]物品调度
查看>>
Keras网络层之常用层Core
查看>>
C# 选择文件、选择文件夹、打开文件(或者文件夹) 路径中获取文件全路径、目录、扩展名、文件名称 追加、拷贝、删除、移动文件、创建目录 修改文件名、文件夹名!!...
查看>>
python学习笔记之——文件I/O
查看>>
【双旦献礼】Portal-Basic Java Web 应用开发框架 v3.0.1 正式发布(源码、示例及文档)...
查看>>
quartz.net的使用
查看>>
split-array-largest-sum(参考了discuss)
查看>>
Mybatis,模糊查询语句,以及传参数的正确写法
查看>>
路由器后面再接一个路由器怎么设置(二级路由)
查看>>
jetty服务器启动方法总结【备用】
查看>>