美文网首页
Netty——IO模型,线程模型

Netty——IO模型,线程模型

作者: StevenHD | 来源:发表于2020-11-11 17:58 被阅读0次

一、BIO——同步阻塞

  • 线程是有开销的
  • 线程切换也是有开销的

连接建立后并不是时时刻刻都会进行读写数据的,但是在空闲时候服务器也要维护这个连接,就会导致服务器压力太大

  • 还有一个问题就是会阻塞,【在进行读写的时候】,如果没有读到数据那么就会阻塞在read()函数那里
    BIO模型

二、NIO——同步非阻塞

  • NIO是BIO的改良
  • Select选择器(多路复用)就是一个对象

一个线程维护多个连接


NIO模型

三、AIO——异步非阻塞

  • 有效的请求才会让服务器启动线程
  • 先由OS完成后再通知【服务端程序】启动线程来处理

四、线程模型

  • 主从Reactor多线程模型——有多个Reactor
  • 传统阻塞IO服务模型


    传统阻塞IO服务模型

Handler是一个【阻塞对象】

五、Reactor模式——反应器模式

Reactor模式

也叫【分发者模式】,【通知者模式】

关键点:

  • 当初的多个阻塞对象换成了一个阻塞对象
  • 线程池


    Reactor详细示意图

六、Reactor模式中的核心组成

  1. Reactor——示意图中的ServicHandler
  2. Handlers——示意图中的EventHandler
    Reactor和Handlers
    Reactor模式分类

七、单Reactor单线程

单Reactor单线程
  • Select监控客户端请求事件
  • Dispatch进行分发
    方案说明

Handler那里在【进行读写】的时候还是会阻塞

优缺点

八、单Reactor多线程

单Reactor多线程
  • 创建多个Handler对象
  • 这里的Handler对象不做具体的业务处理,将业务处理分发给Worker线程池,然后Worker线程池再分配【独立的线程】来完成真正的业务

注:Handler还会收到Worker返回的结果然后send给客户端

对比一下,其实【单Reactor多线程】和【单Reactor单线程】最大的不同就是将【业务处理部分】拿去给Worker线程池来处理,本身还是会造成Reator需要处理所有事件监听和响应的问题。

优缺点

九、主从Reactor多线程

分成了3级

  • 一级:MainReactor
  • 二级:SubReactor, Handler
  • 三级:Worker


    主从Reactor多线程

【MainReactor对象】是通过select()函数来监听【连接事件】的
【SubReactor对象】还是可以监听的,因为它依然有select()函数;【SubReactor对象】还会创建【Handler对象】进行各种事件的处理
【Handler对象】有read()send()函数
将结果发回给【Client对象】的是【Handler对象】
将结果发回给【Handler对象】的是【worker对象】

【MainReactor】可以关联多个【SubReactor对象】

  • 线程池的处理本质是【解码-->计算-->编码】


    Model
    子线程不用给Reactor主线程返回数据

相关文章

  • IO/NIO/Netty的线程模型

    IO的线程模型 NIO的线程模型 Netty的线程模型 netty需要两个线程池,一个是boss 一个是worke...

  • Netty——IO模型,线程模型

    一、BIO——同步阻塞 线程是有开销的 线程切换也是有开销的 连接建立后并不是时时刻刻都会进行读写数据的,但是在空...

  • 1.Netty基本-io模式,线程模型,Reactor模式都啥呀

    关于IO模式,线程模型? Java的io模型分为三种,(BIO,NIO,AIO),Netty现在主要推荐的(NIO...

  • JAVA-每日一面 2022-01-24

    说说Netty 线程模型和 Netty 的零拷贝 Netty 线程模型首先,Netty 使用 EventLoop ...

  • dubbo 线程模型浅析

      dubbo线程模型分为IO线程和服务调用处理线程,IO线程主要是netty的线程,可以在protocol标签中...

  • Netty事件监听和处理(下)

    上一篇 介绍了事件监听、责任链模型、socket接口和IO模型、线程模型等基本概念,以及Netty的整体结构,这篇...

  • Dubbo之线程模型

    以netty传输层实现为例 Dubbo的线程模型其实就是netty的线程模型,主从Refactor模型。 主Ref...

  • 01-IO模型-BIO、NIO、AIO

    IO模型 在学习netty之前,需要对JAVA的io模型进行一个了解,因为netty就是基于NIO进行封装的,io...

  • Netty源码分析-线程模型

    关于Netty线程模型的文章特别多,其中也有讲的非常好的。Netty线程模型的核心在于其如何实现Reactor模型...

  • 2018-07-03

    Netty实践与NIO原理 一、阻塞IO与非阻塞IO Linux网络IO模型(5种) (1)阻塞IO模型 所有文件...

网友评论

      本文标题:Netty——IO模型,线程模型

      本文链接:https://www.haomeiwen.com/subject/hgsebktx.html