1. 什么是IO?

  简单来说就是输入输出

2. 网络IO经历步骤

  1. 用户在获取网络资源是在进入网卡,经过网络七层模型将请求交给nginx用户进程
  2. 用户进程无法直接获取磁盘上的资源,会将请求获取什么资源翻译并转发给内核,内核驱动磁盘寻道找到文件(最耗时间的环节)
  3. 文件同样也不能直接交给用户进程,首先磁盘将文件放至内核缓冲区,然后内核告知用户进程请求的资源结果已准备好(耗时比较短)
  4. 内核缓冲区将文件拷贝一份至用户进程缓冲区,用户进程拿到文件 构建响应报文,通过http回传给用户

总结:

IO总共要经历两个阶段

1.磁盘读取数据,将数据拷贝至内核缓冲区

2.将内核缓冲区数据拷贝至用户进程缓冲区


3. 网络IO模型种类

同步阻塞

比如你要去完成这样一件事情,把水烧开,灌入暖瓶

现在给你一口普通的锅,你也不知道水什么时候可以烧开,你决定守在旁边等待水开。

这个时候的你是什么也做不了的,是不是觉得很浪费时间

当水开了就需要你把水灌入暖瓶,你还是做不了其他的事情

同步非阻塞

比如还是烧一锅开水,你还是不知道水什么时候会开,你选择了另外一个策略,去忙其它的事情但是要时不时看下水开没开

改进了什么呢?

你可以在空挡时间忙其它的事情

增加了什么麻烦呢?

  1. 你得时不时的确认水开没开(就意味着得不停的调用cpu,占用cpu资源)
  2. 可能你上一次刚看的时候水没开,等你刚看完水开了,那就得等下一次查看的时候才能发现,增加了延迟,等你知道了水开了,自己去把水灌好

异步阻塞

这个就比较二了

假如给你一个智能热水壶,水开了会自动的提醒你的,但是你还是要傻傻的等

完全没有利用好智能热水壶的优势(不做解释)

同步异步:关注的是消息的通知机制

阻塞非阻塞:关注的是在收到结果之前调用者的状态是等待还是忙自己的事情

Linuxc/c++服务器开发高阶视频学习资料点击:https://ke.qq.com/course/417774?flowToken=1013189

内容包括C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,MongoDB,ZK,流媒体,P2P,K8S,Docker,TCP/IP,协程,DPDK多个高级知识点。

IO多路复用

还拿烧水的例子

不要你来管水开没开,直接交给一个代理,假如代理名叫select,select在那帮你监控水开没开,捎带他还会看饭有没有煮好,你把所有的事情都交代给它,可以去忙自己的事情了在饭还没熟,水还没开的时候select就处于一个等待的状态,假如这个时候水开了select会水开了的结果写到一个小黑板你可以看到并知道水开了,不需要你去查看水开没开,接下来由你将烧开的水灌进暖瓶(用户进程前半部分不阻塞,后半部份阻塞)

select、poll、epoll的区别

无论是select、poll、epoll都可以面对多个用户进程的请求,它相当于一个代理人,收集很多用户进程的请求,他帮你从磁盘上获取数据,复制到内核中,那么这个数据准备没准备好它的实现机制是不一样的

通知方式:假设有一个用户数据准备好了,那么还有很多用户数据还没有准备好,那么如何通知?

select和poll是遍历扫描,效率低下

epoll采用回调机制,epoll会主动通知,效率更高(nginx支持)

信号驱动IO

举例:比如我们的智能热水壶我么设定好烧水以后,会给你一个反馈结果为设定成功,然后你就可以去忙其他的事情了,等到水烧开了会发给你一条短息,这个时候你再回去把水灌入暖瓶

通知机制:
水平触发:多次通知
边缘触发:只通知一次

总结:说了这么多 nginx 属于IO多路复用 的 epoll

网络IO模型的介绍引出nginx的网络IO模型相关推荐

  1. 算法模型是什么意思,算法模型定义介绍

    算法模型定义介绍 1.马尔科夫模型 1.1马尔科夫过程 马尔可夫过程(Markov process)是一类随机过程.它的原始模型马尔可夫链.已知目前状态(现在)的条件下,它未来的演变(将来)不依赖于它 ...

  2. 基于异步竞争的无线传感器网络MAC层协议介绍(X-MAC ContikiMAC)

    基于异步竞争的无线传感器网络MAC层协议介绍(X-MAC ContikiMAC) 无线传感器网络(wireless sensor networks, WSN)节点由电池供电,其能力非常有限,同时由于工 ...

  3. linux如何配置网络设置_如何在Linux中配置网络

    linux如何配置网络设置 将Linux计算机连接到网络非常简单,除非不是这样. 在本文中,我讨论了基于Red Hat的Linux发行版的主要网络配置文件,并介绍了两个网络启动服务:古老的网络启动和有 ...

  4. 常用 IO 模型图解介绍

    很多时候对于不同的IO模型的概念和原理我们可能不是很清楚,有时候可能也会在不同的IO间迷糊,笔者也是有同样的问题.所以经过系统的学习以后将我们常见的五种IO模型在这里做一下总结,以供大家参考和学习. ...

  5. 详解从redis,memcached到nginx,网络底层io

    从redis,memcached到nginx,网络底层io的哪些事 1. redis的单线程模型 2. memcached的多线程模型 3. nginx的多进程模型 4. 10种网络模型的应用场景 视 ...

  6. 神经网络(NN)网络构建及模型算法介绍

    概述 神经网络最主要的作用是作为提取特征的工具,最终的分类并不是作为主要核心. 人工神经网络也称为多层感知机,相当于将输入数据通过前面多个全连接层网络将原输入特征进行了一个非线性变换,将变换后的特征拿 ...

  7. 【Linux网络编程】深入理解Linux五种网络IO模型

    相信很多从事linux后台开发工作的都接触过同步&异步.阻塞&非阻塞这样的概念,也相信都曾经产生过误解,比如认为同步就是阻塞.异步就是非阻塞,下面我们先剖析下这几个概念分别是什么含义. ...

  8. java基础巩固-宇宙第一AiYWM:为了维持生计,四大基础之OS_Part_2整起~IO们那些事【包括五种IO模型:(BIO、NIO、IO多路复用、信号驱动、AIO);零拷贝、事件处理及并发等模型】

    PART0.前情提要: 通常用户进程的一个完整的IO分为两个阶段(IO有内存IO.网络IO和磁盘IO三种,通常我们说的IO指的是后两者!):[操作系统和驱动程序运行在内核空间,应用程序运行在用户空间, ...

  9. 性能追击:万字长文30+图揭秘8大主流服务器程序线程模型 | Node.js,Apache,Nginx,Netty,Redis,Tomcat,MySQL,Zuul

    本文为<高性能网络编程游记>的第六篇"性能追击:万字长文30+图揭秘8大主流服务器程序线程模型". 最近拍的照片比较少,不知道配什么图好,于是自己画了一个,凑合着用,让 ...

最新文章

  1. Django静态文件一瞥
  2. Python基本语法_函数_返回值
  3. pix2pix, pix2pixHD, vid2vid
  4. druid.io 海量实时OLAP数据仓库 (翻译+总结) (1)——分析框架如hive或者redshift(MPPDB)、ES等...
  5. python入门基础代码图-Python入门基础学习一
  6. 2012-05-04 12:58 eclipse老是building workspace及自动更新问题,eclipse加速
  7. Angular Effects.ofType的工作原理
  8. linux配置ip地址 suse_suse linux中为单网卡配置多IP的方法
  9. 如何调整金格电子章服务器印章_重磅!公安部再度认可电子签名、电子印章法律效力!...
  10. Cordova安装与配置过程中出现的问题及解决办法
  11. 中科恒伦助力长江电力移动办公平台账号加固
  12. qt linux 网络聊天室,QT tcp网络聊天室群聊的实现
  13. AutoIT如何制作自动化安装脚本-SketchUp 2017
  14. Numpy:numpy包下载并导入Pycharm的方法
  15. SpringBoot 配置文件加载优先级
  16. cyj等于什么英语单词_英语解题方法指导及例题分析
  17. H - Shifting Sort
  18. 固态硬盘坏了怎么恢复数据恢复
  19. 如果我恨一个人,我就领他到中关村买相机。
  20. Mini-CEX在神经内科住院医师临床能力培养中的应用

热门文章

  1. Python操作Redis的最佳实践
  2. python随机密码生成10个8位密码_生成8位随机密码脚本
  3. 002-B/S架构C/S架构
  4. 贝叶斯定理和先后验概率
  5. PYTHON 100days学习笔记007-1:python数据类型补充(1)
  6. 端口号与ip、网关的作用?
  7. spring-cloud微服务架构图
  8. .DS_Stroe文件造成git合并失败
  9. 怎么看Evernote每月已用上传空间大小how to know how much storage space I have used in evernote
  10. 新生研讨课报告——图片处理在电影特效制作中的应用