Netty工作原理图

  

  1. netty抽象出了两组线程池,BossGroup专门负责客户端 的连接,WorkerGroup专门负责网络读写。
  2. BossGroup和WorkerGroup 类型都是NioEventLoopGroup
  3. NioEventLoopGroup相当于一个事件循环组,这个组中含有多个事件循环,每一个事件循环是一个NioEventLoop
  4. NioEventLoop表示一个不断循环的执行处理任务的线程,每个NioEventLoop都有一个selector,用于监听绑定在其上socket网络通信
  5. NioEventLoopGroup可以有多个线程,即可以含有多个NioEventLoop
  6. 每个Boss对应的NioEvenetLoop都会执行以下三步:
    1. 轮询accept事件,
    2. 处理accept事件,与client建立socket连接,生成NioSocketChannel,并将生成的NioSocketChannel注册到某个worker NioEventLoop上的selector上。
    3. 处理任务队列中的任务,即runAllTasks
  7. 每个worker NioEventLoop循环执行步骤:
    1. 轮询read/write事件
    2. 处理io事件,即read ,write事件,在对应的NioSocketChannel处理
    3. 处理任务队列中的其它任务
  8. 每个worker NioEventLoop会使用PipeLine管道处理,PipeLine中包含了Channel,即通过PipeLine可以获取对应的Channel, 管道中维护了很多的处理器Handler

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

NioEventLoop表示一个不断循环处理任务的线程,而且每个NioEventLoop都有一个selector,用于监听绑定在其上的socket网络通道

NioEventLoop内部采用串型化设计,从消息的读取----> 解码----> 处理--------> 编码------>发送, 始终于IO线程的NioEventLoop负责

  1. NioEventLoopGroup下包含多个NioEventLoop
  2. 每个NioEventLoop包含一个Selector, 一个taskQueue
  3. 每个NioEventLoop的selector上可以注册监听多个NioChannel
  4. 每个NioChannel只会绑定在唯一的NioEventLoop上
  5. 每个NioChannel都会绑定一个自己的ChannelPipeLline

异步模型

Future-Listener机制

Future说明:

  1. 表示异步执行结果,可以通过它提供的方法来检测执行是否完成,比如检测计算等
  2. ChannelFuture接口:我们可添加监听器,当监听的事件发生时,就会通知到监听器

netty模型简介的更多相关文章

  1. Netty 源码(一)Netty 组件简介

    Netty 源码(一)Netty 组件简介 Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) 一.Netty 架构 Core: ...

  2. Sequelize 关系模型简介

    Sequelize 关系模型简介 先介绍一下本文用到的术语: 源: 调用 sequelize 中关系方法的调用者 目标: 调用 sequelize 中关系方法中的参数 比如, User.hasOne( ...

  3. jvm-垃圾回收gc简介+jvm内存模型简介

    gc是jvm自动执行的,自动清除jvm内存垃圾,无须人为干涉,虽然方便了程序员的开发,但同时增加了开发人员对内存的不可控性. 1.jvm内存模型简介 jvm是在计算机系统上又虚拟出来的一个伪计算机系统 ...

  4. CSS box-flex属性,然后弹性盒子模型简介

    今天做项目的时候发现一个css3的新属性flex 一.什么是flex 它的作用是能够按照设置好的规则来排列容器内的项目,而不必去计算每一个项目的宽度和边距.甚至是在容器的大小发生改变的时候,都可以重新 ...

  5. 转:概率主题模型简介 --- ---David M. Blei所写的《Introduction to Probabilistic Topic Models》的译文

    概率主题模型简介 Introduction to Probabilistic Topic Models      转:http://www.cnblogs.com/siegfang/archive/2 ...

  6. ORM模型简介

    ORM模型简介 1>什么是ORM? ORM,即 Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在操作具体的 ...

  7. spring 事件驱动模型简介

    事件驱动模型简介 事件驱动模型也就是我们常说的观察者,或者发布-订阅模型:理解它的几个关键点: 首先是一种对象间的一对多的关系:最简单的如交通信号灯,信号灯是目标(一方),行人注视着信号灯(多方): ...

  8. SNF快速开发平台2019-权限管理模型简介-权限都在这里

    1.1    权限的概念 权限是指为了保证职责的有效履行,任职者必须具备的,对某事项进行决策的范围和程度.它常常用“具有批准……事项的权限”来进行表达.例如,具有批准预算外5000元以内的礼品费支出的 ...

  9. Linux 网络 I/O 模型简介(图文)(转载)

    Linux 网络 I/O 模型简介(图文)(转载) 转载:http://blog.csdn.net/anxpp/article/details/51503329 1.介绍 Linux 的内核将所有外部 ...

随机推荐

  1. oracle常用sql语句和函数

    --查询表的字段数 select count(*) from user_tab_columns where table_name = '表名'; --查询数据库用户密码的profile(一般为defa ...

  2. 008-Spring Boot @EnableAutoConfiguration深入分析、内部如何使用EnableAutoConfiguration

    一.EnableAutoConfiguration 1.EnableAutoConfiguration原理 springboot程序入口使用注解@SpringBootApplication,Sprin ...

  3. Swiper轮播手动后不动

    最近项目首页轮播图用了Swiper轮播,今天突然发现轮播图动画初始正常但是手动换过之后就不动了,解决方法有两种,具体根据采用的情况为准: 1.autoplayDisableOnInteraction: ...

  4. [转载]OpenSSL中文手册之命令行详解(未完待续)

     声明:OpenSSL之命令行详解是根据卢队长发布在https://blog.csdn.net/as3luyuan123/article/details/16105475的系列文章整理修改而成,我自己 ...

  5. base64编解码的两个函数(安全版本)

    void base64_encode_s(const unsigned char *str, long inlen, std::string& outstr, long* lpBufLen) ...

  6. 深入理解任何Binder Client都可以直接通过ServiceManager的0这个Binder句柄创建一个BpBinde

    ServiceManager是安卓中一个重要的类,用于管理所有的系统服务,维护着系统服务和客户端的binder通信.对此陌生的可以先看系统服务与ServiceManager来了解应用层是如何使用Ser ...

  7. 聊聊NTLM认证协议

    近期发现多家安全媒体发布NTLM协议漏洞的文章.他们越说越术语,越说越官方,如此这般下去,他们写出来到底给谁看?大雅就是俗,让我来一篇俗文.啥是NTLM呢?微软windows系统的用户账号存储密码哈希 ...

  8. Path.GetExtension 方法 (String)

    返回指定的路径字符串的扩展名. 命名空间:   System.IO程序集:  mscorlib(位于 mscorlib.dll) ----------------------------------- ...

  9. Python之字符串和正则表达式

    使用正则表达式 Python对正则表达式的支持 例子:替换字符串中的不良内容 import re def main(): sentence = '你丫是傻叉吗? 我操你大爷的. Fuck you.' ...

  10. EA逆向生成数据库E-R图(mysql数据库-->ER图)

    [1]选择 工具-->ODBC-Data-Sources [2]ODBC数据源管理器  ,点击添加 [3]选择一个mysql驱动  ,点击MySQL ODBC 5.1 Driver(其它同理), ...