【IO模型】阻塞,非阻塞,多路复用

文章目录

  • 阻塞与非阻塞
  • 一:阻塞IO
  • 二:非阻塞IO
  • 三:IO多路转接

阻塞与非阻塞

阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态:

  • 阻塞调用是指调用结果返回之前,当前线程会被挂起. 调用线程只有在得到结果之后才会返回。
  • 非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

一:阻塞IO

阻塞IO: 在内核将数据准备好之前, 系统调用会一直等待,所有的套接字, 默认都是阻塞方式。
阻塞是最最常见的IO模型:

【IO模型】阻塞,非阻塞,多路复用_第1张图片

二:非阻塞IO

非阻塞IO: 如果内核还未将数据准备好, 系统调用仍然会直接返回, 并且返回EWOULDBLOCK错误码。

【IO模型】阻塞,非阻塞,多路复用_第2张图片

非阻塞IO往往需要程序员循环的方式反复尝试读写文件描述符, 这个过程称为轮询。 这对CPU来说是较大的浪费, 一般只有特定场景下才使用。

三:IO多路转接

多路转接:最核心在于IO多路转接能够同时等待多个文件描述符的就绪状态。
在这里插入图片描述

你可能感兴趣的:(学习分享,个人理解,笔记,服务器,运维,c++,设计模式)