Netty初识 -- IO模型的了解

一、IO了解

1、五大IO模型

在这里插入图片描述

(1)阻塞IO

阻塞IO是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。

在这里插入图片描述

(2)非阻塞IO

非阻塞I0是指在不能立刻得到结果之前,该调用不会阻塞当前线程。
在这里插入图片描述

(3)IO多路复用

I0多路复用(I0 Multiplexing)是指单个进程/线程就可以同时处理多个IO请求。
在这里插入图片描述
他有三种处理方式
在这里插入图片描述

select处理方式:连接数少且活跃数量多的时候性能好

优势:基于POSIX(可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ))的标准,有比较好的跨平台性。

缺点:

​ (1)最大连接数有上限,1024(可以修改,但意义不大)。

​ (2)每次调用select的时候,都需要把需要监控的文件描述符的集合从用户空间拷贝到内核空间,当文件描述符很多的时候开销会很大。

​ (3)每次有活跃的描述符的时候,会遍历所有的文件描述符。

在这里插入图片描述

poll处理方式:与select很相似,只是底层数据结构不同,也是连接数少且活跃数量多的时候性能好

​ 优势:最大连接数无上限

epoll处理方式:

​ epoll_create:创建epoll,然后epoll创建红黑树和双向链表。

​ epoll_ctl:把文件描述符添加到红黑树中。

​ epoll_wait:调用时,检测链表(就绪的)有没有数据。

在这里插入图片描述

三种方式性能比较:

在这里插入图片描述

(4)信号驱动IO模型:

在这里插入图片描述

(5)异步IO:

在这里插入图片描述

2、传统的IO模型

优点:模型简单,可维护性高,适用于连接数小的情况。

缺点:当连接数大的情况下,线程占用资源将会过大,上下文切换时候开销很大,尤其当服务器网络不好时候,会大幅度降低服务器吞吐量。

解决:线程池,IO复用模型
在这里插入图片描述

3、NIOReactor模型

三大组件:Reactor、acceptor、handler

(1)单Reactor单线程

缺点:一个线程处理很多资源,造成资源的极大浪费。

在这里插入图片描述

(2)单Reactor多线程

缺点:

多线程之间数据的共享与访问就变得复杂。

Reactor承担所有事件的监听与响应,有可能会有性能问题
在这里插入图片描述

(3)主从Reactor多线程

主的Reactor直接收acceptor的请求,acceptor在建立handler包括后续的事情都交给子的Reactor,nettynginx都是基于这个模型。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值