阻塞/非阻塞 、 同步/异步

典型的一次IO的两个阶段是什么?数据准备/就绪(监听)和数据读写

阻塞的时候,线程会被处于挂起状态。如果有数据则返回,也可能出现错误返回-1;

非阻塞的时候,线程会执行,遇到recv会直接返回值,返回-1时,会出现errno错误,比如中断引起的EINTR、EAGAIN、EWOULDBLOCK。
同步表示A 向 B 请求调用一个网络 IO 接口时(或者调用某个业务逻辑 API 接口时),数据的读写都是 由请求方A 自己来完成的(不管是阻塞还是非阻塞);异步表示 A 向 B 请求调用一个网络 IO 接口时 (或者调用某个业务逻辑API 接口时), 向B传入请求的事件以及事件发生时通知的方式,A就可以处理其它逻辑了 ,当B 监听到事件处理完成后,会用事先约定好的通知方式,通知 A 处理结果。
在处理 IO 的时候,阻塞和非阻塞都是同步 IO,只有使用了特殊的 API 才是异步 IO。

  1. EINTR (Interrupted System Call):

    • 意义:系统调用被中断。
    • 发生情况:当进程收到信号时,可能会中断正在进行的系统调用。当信号处理程序执行完毕后,系统调用可能会返回这个错误码,表示调用被中断。程序员通常需要重新发起系统调用。
  2. EAGAIN (Resource temporarily unavailable):

    • 意义:资源暂时不可用。
    • 发生情况:在非阻塞I/O中,当操作无法立即完成(例如,读取或写入没有数据可用或缓冲区已满)时,系统调用可能返回 EAGAIN。这并不表示错误,而是指出应用程序应该稍后再次尝试。
  3. EWOULDBLOCK (Operation would block):

    • 意义:操作将会阻塞。
    • 发生情况:与 EAGAIN 类似,EWOULDBLOCK 也表示在非阻塞I/O中,操作无法立即完成,但这两个错误码在实际使用中通常是相同的。在许多系统中,EAGAIN 和 EWOULDBLOCK 被定义为相同的值。
相关推荐
赖small强14 分钟前
【Linux驱动开发】NOR Flash 技术原理与 Linux 系统应用全解析
linux·驱动开发·nor flash·芯片内执行
00后程序员张18 分钟前
HTTPS Everywhere 时代的抓包挑战,从加密流量解析到底层数据流捕获的全流程方案
网络协议·http·ios·小程序·https·uni-app·iphone
CNRio20 分钟前
第8章 网络安全应急响应
网络·安全·web安全
风掣长空42 分钟前
Google Test (gtest) 新手完全指南:从入门到精通
运维·服务器·网络
发光小北1 小时前
SG-PNh750-TCP-210(Profinet 从站转 Modbus TCP 网关)
网络·网络协议·tcp/ip
IT运维爱好者1 小时前
【Linux】LVM理论介绍、实战操作
linux·磁盘扩容·lvm
LEEE@FPGA1 小时前
ZYNQ MPSOC linux hello world
linux·运维·服务器
郝学胜-神的一滴1 小时前
Linux定时器编程:深入理解setitimer函数
linux·服务器·开发语言·c++·程序人生
冉佳驹2 小时前
Linux ——— 系统中的用户身份切换、文件权限管理、特殊权限和粘滞位设置
linux·chmod·chown·粘滞位·su 命令·chgrp·umask
Tranquil_ovo2 小时前
【Linux】Makefile 基础
linux