vlambda博客
学习文章列表

Netty 4.x学习笔记(二)——线程模型

目前存在的线程模型


  • 传统阻塞 I/O服务模型(阻塞式IO)

  • Reactor模式(反应器模式)



根据Reactor的数量和处理资源池线程的数量不同,有3种典型的实现

  • 单Reactor单线程

  • 单Reactor多线程

  • 主从Reactor多线程


   

Netty线程模式


主要基于主从Reactor多线程模型做了一定的改进,其中主从Reactor多线程模型有多个Reactor



传统阻塞 I/O服务模型


特点:

  1. 采用阻塞IO模式获取输入的数据

  2. 每个连接都需要独立的线程完成数据的输入,业务处理,数据返回

问题分析:

  • 当并发数很大,就会创建大量的线程,占用很大系统资源

  • 连接创建后,如果当前线程暂时没有数据可读,该线程会阻塞在read操作,造成线程资源的浪费   



Reactor模式


针对传统阻塞I/O服务模型的2个缺点,解决方案:

  1. 基于I/O复用模型:多个连接共用一个阻塞对象,应用程序只需要在一个阻塞对象等待,无需阻塞等待所有连接。当某个连接有新的数据可以处理时,操作系统通知应用程序,线程从阻塞状态返回,开始进行业务处理。

  2. 基于线程池复用线程资源:不比比再为每个连接创建线程,将连接完成后的业务处理任务分配给线程进行处理,一个线程可以处理多个连接的业务。

针对 1 Reactor对应的叫法:反应器模式/分发者模式/通知者模式