细节分析Linux中五种IO模型和三种实现方式

本文详细介绍了Linux中的五种IO模型:同步阻塞、同步非阻塞、IO多路复用、信号驱动I/O和异步I/O,并重点讲解了IO多路复用模型中的Select、Poll和Epoll实现方式。通过对各种模型的对比,阐述了它们的优缺点和适用场景,指出Epoll在高并发场景中的优势。
摘要由CSDN通过智能技术生成

I/O介绍

操作系统分为两种I/O

  • 网络IO:本质是socket读取
  • 磁盘IO:DMA操作读取

C/C++Linux服务器开发知识点 内容包括C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,MongoDB,ZK,流媒体,音视频开发,Linux内核,P2P,K8S,Docker,TCP/IP,协程,DPDK多个高级知识点,点击:C/C++Linux服务器开发高级架构师/Linux后台架构师-学习视频

每次I/O过程

  1. (DMA)将数据从磁盘文件先加载至内核内存空间(缓冲区),等待数据准备完成,时间较长
  2. (CPU)将数据从内核缓冲区复制到用户空间的进程的内存中,时间较短

I/O模型

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

  • 同步:synchronous,调用者等待被调用者返回消息,才能继续执行
  • 异步:asynchronous,被调用者通过状态、通知或回调机制主动通知调用者被调用者的运行状态

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

  • 阻塞:blocking,指IO操作需要彻底完成后才返回到用户空间,调用结果返回之前,调用者被挂起
  • 非阻塞:nonblocking,指IO操作被调用后立即返回给用户一个状态值,无需等到IO操作彻底完成,最终的调用结果返回之前,调用者不会被挂起

五种I/O模型:

  • 同步阻塞型、同步非阻塞型、IO多路复用型、信号驱动I/O型、异步I/O型

同步阻塞型

  • 同步阻塞IO模型是最简单的IO模型,用户线程在内核进行IO操作时被阻塞
  • 用户线程通过系统调用read发起IO读操作,由用户空间转到内核空间。内核等到数据包到达后,然后将接收的数据拷贝到用户空间,完成read操作
  • 用户需要等待r
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值