热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NettyReactor模式相关知识点总结

一、Netty对三种IO的支持 舍弃了BIO的支持是因为Netty应用在高并发场景下,此时BIO性能是扛不住的,因为它阻塞,占用cpu资源比较厉害,不适合这种场景。当然并不是说NI

一、Netty对三种I/O的支持

Netty Reactor模式相关知识点总结

  1.  舍弃了BIO的支持是因为Netty应用在高并发场景下,此时BIO性能是扛不住的,因为它阻塞,占用cpu资源比较厉害,不适合这种场景。当然并不是说NIO就一定性能优于BIO,在某些并发度低,连接数少的情况下,BIO的性能是优于NIO的。
  2. 舍弃AIO是因为我们部署服务器一般都部署在Linux系统,什么原因此处不赘述。而Linux系统的同步非阻塞IO,多路复用模型实现epoll其性能优于windows的Select实现。所以Netty支持NIO,据说Netty的实现垃圾回收最少,从而提高了性能。

二、Netty的三种Reactor模式:

我们知道Reactor是一种开发模式:注册事件——>扫描注册过的事件是否发生——>事件发生后做相应的处理。

这个流程是不是很像Springboot启动时注册一些Listener去监听一些事件,等事件发生了再去做一些操作。我不知道底层实现是不是一样的,后面再看吧。先说Reactor。

1.单线程模式:

Netty Reactor模式相关知识点总结

 这种模式顾名思义就是一个线程既要接收数据,还要做分发处理,起一个线程去做read,decode,compute,encode,send这些事情,由于read和sent都是阻塞操作,所以它的能力有限。高并发的时候总不能一直起线程去做吧。线程的创建和销毁也要消耗大量CPU资源的。什么?你说线程池,线程池也只是限制了创建线程的数量而已,并没有从根本上解决问题。大概的代码实现是这样子的:

Netty Reactor模式相关知识点总结

 它new了一个ServerSocket绑定了一个端口,然后去accept客户端连接,然后new了一个线程绑定了一个handler去做read,write操作,而这两个操作都是阻塞的。

2. 多线程模式

Netty Reactor模式相关知识点总结

 这种模式把比较耗时的decode,compute,encode操作都让一个线程池去负责。read和send也分开不同线程去负责。算是有一定的分工了。

3.第三中是主次多线程模式(顺应潮流,一些词汇能不用就不用了)

Netty Reactor模式相关知识点总结

 这种模式是专门一个reactor去做数据接收这件事情,然后其它的做法跟第二种模式没有区别。就是觉得用户数据接入是一件很重的事情,必须要有专门的线程负责这件事。

三、Netty中如何实现三种Reactor模式的呢?

Netty Reactor模式相关知识点总结

 看到单线程模式是显式的指定了一个线程工作,第二种跟第一种的区别在于没有限制线程数量,当然没有限制并不是说就可以与所欲为了,当然不是。它会根据cpu的情况计算出一个最优的线程数量。第三种就多了一个EvenLoopGroup,既然线程数量一定,那么这样就是将线程分成了两拨来使用的。至于名字为啥叫boss和work,主要是更好的理解吧。但是我觉得,虽然叫boss和worker,但是他们并没有什么类似的关系。只是单纯的把线程分开各行其是而已。所以不要误解了,翻译成“主从”我也不知道是谁的习惯。

关于Reactor相关的知识先总结到这里,积少成多,一定要坚持!

 


推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
author-avatar
小乐的孤独人生_298
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有