I/O模型

文章目录

  • I/O模型相关概念
    • 网络I/O模型
      • 阻塞型I/O模型
      • 非阻塞型I/O模型
      • 多路复用I/O型
      • 信号驱动式I/O型
      • 异步I/O模型
    • apache和nginx的区别,什么时候选择apache,什么时候选择nginx

文章相关连接如下:

  • 如果想更多了解nginx,请点击:企业高性能web服务器之nginx篇
  • 如果想更多了解web服务工作模型,请点击:重大发现!看Apache与nginx工作模型,享web服务幸福人生

I/O模型相关概念

同步/异步:关注的是消息通信机制,即调用者在等待一件事情的处理结果时,被调用者是否提供完成状态的通知。

  • 同步:synchronous,被调用者并不提供事件的处理结果相关的通知消息,需要调用者主动询问事情是否处理完成
  • 异步:asynchronous,被调用者通过状态、通知或回调机制主动通知调用者被调用者的运行状态
    在这里插入图片描述

阻塞/非阻塞:关注调用者在等待结果返回之前所处的状态

  • 阻塞:blocking,指IO操作需要彻底完成后才返回到用户空间,调用结果返回之前,调用者被挂起,干不了别的事情。
  • 非阻塞:nonblocking,指IO操作被调用后立即返回给用户一个状态值,而无需等到IO操作彻底完成,在最终的调用结果返回之前,调用者不会被挂起,可以去做别的事情。
    在这里插入图片描述

网络I/O模型

阻塞型、非阻塞型、复用型、信号驱动型、异步

阻塞型I/O模型

阻塞型 I/O 模型(blocking IO)流程图
在这里插入图片描述

  • 阻塞IO模型是最简单的I/O模型,用户线程在内核进行IO操作时被阻塞
  • 用户线程通过系统调用read发起I/O读操作,由用户空间转到内核空间。内核等到数据包到达后,然后将接收的数据拷贝到用户空间,完成read操作
  • 用户需要等待read将数据读取到buffer后,才继续处理接收的数据。整个I/O请求的过程中,用户线程是被阻塞的,这导致用户在发起IO请求时,不能做任何事情,对CPU的资源利用率不够

优点:程序简单,在阻塞等待数据期间进程/线程挂起,基本不会占用 CPU 资源

缺点:每个连接需要独立的进程/线程单独处理,当并发请求量大时为了维护程序,内存、线程切换开销较apache 的preforck使用的是这种模式。

非阻塞型I/O模型

在这里插入图片描述

在设置连接为非阻塞时,当应用进程系统调用 recvfrom 没有数据返回时,内核会立即返回一个 EWOULDBLOCK 错误,而不会一直阻塞到数据准备好。如上图在第四次调用时有一个数据报准备好了,所以这时数据会被复制到 应用进程缓冲区 ,于是 recvfrom 成功返回数据

  • 当一个应用进程这样循环调用 recvfrom 时,称之为轮询 polling 。这么做往往会耗费大量CPU时间,实际使用很少

多路复用I/O型

  • 上面的模型中,每一个文件描述符对应的IO是由一个线程监控和处理
  • 多路复用IO指一个线程可以同时(实际是交替实现,即并发完成)监控和处理多个文件描述符对应各自的IO,即复用同一个线程
  • 一个线程之所以能实现同时处理多个IO,是因为这个线程调用了内核中的SELECT,POLL或EPOLL等系统调用,从而实现多路复用IO

在这里插入图片描述
基本原理:select/poll/epoll这个function会不断的轮询所负责的所有socket,当某个socket有数据到达了,就通知用户进程。

优点

  • 可以基于一个阻塞对象,同时在多个描述符上等待就绪,而不是使用多个线程(每个文件描述符一个线程),这样可以大大节省系统资源

缺点

  • 当连接数较少时效率相比多线程+阻塞 I/O 模型效率较低,可能延迟更大,因为单个连接处理需要 2 次系统调用,占用时间会有增加

适用场景:

  • 当客户端处理多个描述符时(一般是交互式输入和网络套接口),必须使用I/O复用
  • 当一个客户端同时处理多个套接字时,此情况可能的但很少出现
  • 当一个服务器既要处理监听套接字,又要处理已连接套接字,一般也要用到I/O复用
  • 当一个服务器即要处理TCP,又要处理UDP,一般要使用I/O复用
  • 当一个服务器要处理多个服务或多个协议,一般要使用I/O复用

信号驱动式I/O型

在这里插入图片描述
信号驱动I/O的意思就是进程现在不用傻等着,也不用去轮询。而是让内核在数据就绪时,发送信号通知进程

优势:

  • 等待数据报到达期间进程不被阻塞。用户主程序可以继续执行,只要等待来自信号处理函数的通知。
  • 在信号驱动式 I/O 模型中,应用程序使用套接口进行信号驱动 I/O,并安装一个信号处理函数,进程继续运行并不阻塞
  • 在信号驱动式 I/O 模型中,应用程序使用套接口进行信号驱动 I/O,并安装一个信号处理函数,进程继续运行并不阻塞
  • 线程并没有在等待数据时被阻塞,内核直接返回调用接收信号,不影响进程继续处理其他请求因此可以提高资源的利用率

缺点:

  • 信号 I/O 在大量 IO 操作时可能会因为信号队列溢出导致没法通知
  • 异步阻塞:程序进程向内核发送IO调用后,不用等待内核响应,可以继续接受其他请求,内核收到进程
    请求后
  • 进行的IO如果不能立即返回,就由内核等待结果,直到IO完成后内核再通知进程。

异步I/O模型

在这里插入图片描述

优点:

  • 异步 I/O 能够充分利用 DMA 特性,让 I/O 操作与计算重叠

缺点:

  • 要实现真正的异步 I/O,操作系统需要做大量的工作。目前 Windows 下通过 IOCP 实现了真正的异步 I/O,在 Linux 系统下,Linux 2.6才引入
  • 目前 AIO 并不完善,因此在 Linux 下实现高并发网络编程时以 IO 复用模型模式+多线程任务的架构基本可以满足需求

异步非阻塞:

  • 程序进程向内核发送IO调用后,不用等待内核响应,可以继续接受其他请求,内核调用的IO如果不能立即返回,内核会继续处理其他事物,直到IO完成后将结果通知给内核,内核在将IO完成的结果返回给进程,期间进程可以接受新的请求,内核也可以处理新的事物,因此相互不影响,可以实现
    较大的同时并实现较高的IO复用,因此异步非阻塞使用最多的一种通信方式。

apache和nginx的区别,什么时候选择apache,什么时候选择nginx

  • 两者最核心的区别在于apache是同步多进程模型,一个连接对应一个进程,而nginx是异步的,多个连接(万级别)可以对应一个进程。
  • 需要性能的web服务,用nginx。如果不需要性能只求稳定,更考虑apache,apache的各种功能模块实现比nginx好,例如ssl的模块就比nginx好,可配置项多。
  • epoll(freebsd上是kqueue)网络IO模型是nginx处理性能高的根本理由,但并不是所有的情况下都是epoll大获全胜的,如果本身提供静态服务的就只有寥寥几个文件,apache的select模型或许比epoll更高性能。
  • 这只是根据网络IO模型的原理作的一个假设,真正的应用还是需要实测。更为通用的方案是,前端nginx抗并发,后端apache集群,配合起来会更好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/405808.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么要使用TikTok云手机

随着TikTok平台的日益繁荣,TikTok云手机作为一种新兴的运营工具,正以其独特的云端技术和用户体验,赢得广大用户的青睐。相较于传统手机,TikTok云手机通过云端技术为用户带来了一系列新的优势,让TikTok运营变得更加灵活…

涂料耐久性氙灯老化试验箱

涂料氙灯老化试验箱是现代检测手段中常用的一种设备,它能够模拟自然光照、光照老化等环境条件,对涂料、染料、塑料、橡胶、纺织品、涂层等材料进行老化试验,以评估其耐久性和使用寿命。本文将详细介绍涂料氙灯老化试验箱的工作原理、使用注意…

正则表达式——详解

正则表达式是什么? 正则表达式(Regular Expression,通常简写为 regex、regexp 或 RE)是一种强大的文本处理工具,用于描述一组字符串的模式。它可以用来匹配、查找、替换等操作,几乎所有现代编程语言都支持…

【流媒体】RTMPDump—RTMP_Connect函数(握手、网络连接)

目录 1. RTMP_Connect函数1.1 网络层连接(RTMP_Connect0)1.2 RTMP连接(RTMP_Connect1)1.2.1 握手(HandShake)1.2.2 RTMP的NetConnection(SendConnectPacket) 2.小结 RTMP协议相关&am…

2024计算机软考报名流程(电脑报名)

1.24年下半年软考报名时间,各省报名时间不一样, 报名时间大概集中在:24年8月19日~24年9月15日; 报名网站:中国计算机技术职业资格网; 广东:2024年8月21日9:00至29日17:00 安徽&#…

Vue3 的 expose 介绍

在 Vue 3 中,expose 是一个用于控制组件内部方法和属性暴露给父组件的新功能。这使得父组件可以调用子组件内部的方法或访问其数据,尤其在使用组合式 API(Composition API)时,这种能力非常有用。 1. 基本用法 expose…

[PHP]-Laravel中Group By引发的问题思考

Laravel 和 ThinkPHP 是两个不同的 PHP 框架,它们在底层使用了相同的 SQL 查询语言来与数据库交互。然而,由于框架的设计和实现方式不同,它们在生成 SQL 查询时可能会表现出一些细微的差异,包括对 GROUP BY 子句的处理。 在调用查…

高性能web服务器1

基础 Web 服务简介 Web 服务是互联网的核心组成部分之一,它允许用户通过浏览器访问信息和应用程序。一个基础的 Web 服务通常由 Web 服务器软件、静态网页内容、以及可选的动态内容生成程序组成。 Web 服务器软件 Web 服务器软件是运行在服务器上的程序&#xff…

STM32(二):GPIO

GPIO(General Purpose Input Output)通用输入输出口 1.可配置为8种输入输出模式,引脚电平:0V~3.3V,部分引脚可容忍5V,输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等,输入模式下…

二叉树中的奇偶树问题

目录 一题目: 二思路汇总: 1.二叉树层序遍历: 1.1题目介绍: 1.2 解答代码(c版): 1.3 解答代码(c版): 1.4 小结一下: 2.奇偶树分析&#xf…

glibc 2.24 下 IO_FILE 的利用

文章目录 glibc 2.24 下 IO_FILE 的利用介绍:新的利用技术fileno 与缓冲区的相关利用实例:1. _IO_str_jumps -> overflow实例: 2. _IO_str_jumps -> finish实例: 最后拓展一下上一篇博客house of orange题目的做法: glibc 2.24 下 IO_F…

Oracle基本SQL操作-用户角色权限管理

一、用户权限管理 -- 创建锁定用户,此时用户不可用 create USER zhucl IDENTIFIED BY 123456 account lock; 会提示用户被锁定: -- 删除用户 drop user zhucl;-- 重新创建用户,不锁定 create user zhucl IDENTIFIED BY 123456 account unlo…

嵌入式和单片机有什么区别?

目录 (1)什么是嵌入式? (2)什么是单片机? (3)嵌入式和单片机的共同点 (4)嵌入式和单片机的区别 (1)什么是嵌入式? 关…

45.x86游戏实战-XXX封包组包拼包详解

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 工具下载: 链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

提车后遇大降价被指“背刺”车主,方程豹的口碑问题何解?

进入8月下旬,汽车市场“金九银十”的销售旺季即将到来,将行业“内卷”推向新高峰。即便有宝马等高端豪华品牌退出“价格战”的先例,但为刺激销量,不少车企依旧推出了各式各样的价格优惠政策,行业内部价格竞争狼烟四起。…

Kotlin 流flow、ShareFlow、StateFlow、Channel的解释与使用

一、介绍 随着Android接入kotlin开发,Android之前好多模式也渐渐被kotlin替代。开发模式也在做渐进的转型,从MVC到MVP在到MVVP以及现在的MVI等。 流IO在java中和kotlin中使用率都是比较高的,场景很多。如Java的IO和NIO,再到我们现…

Java、python、php版的高校失物招领平台(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…

kali网络代理设置

首先主机必须有自己的代理。记住主机的ip和代理端口。 在kali中打开终端: vim /etc/proxychains4.conf输入代理进行更改 把这行注释掉,在下一行输入 socks5 主机ip 代理端口 点击esc,在:wq退出保存。 配置完成。

Salesforce 发布开源大模型 xGen-MM

xGen-MM 论文 在当今 AI 技术飞速发展的时代,一个新的多模态 AI 模型悄然崛起,引起了业界的广泛关注。这个由 Salesforce 推出的开源模型—— xGen-MM,正以其惊人的全能特性和独特优势,在 AI 领域掀起一阵旋风。那么,x…

Why Does ChatGPT Fall Short in Providing Truthful Answers?

文章目录 题目摘要简介相关工作模型和数据集结果事实性背后的能力提高 QA 的事实性结论 题目 为什么 ChatGPT 无法提供真实的答案? 论文地址:https://arxiv.org/abs/2304.10513 摘要 ChatGPT 等大型语言模型的最新进展已显示出影响人类生活各个方面的巨大潜力。然而…