先上几张io图

阻塞IO

非阻塞IO

IO多路复用之select
一、阻塞IO与非阻塞IO
Q1: 阻塞是什么意思或者这个上下文环境是什么?
A: 阻塞是进程5状态或者7状态 其中一个状态,线程也有阻塞态
Q2: 什么情况下会使得运行中的进程进入阻塞态?
A: 因为阻塞态 是等待IO时间完成的过程 ,所以正常情况下IO操作都会进入导致进程(线程)进入阻塞态
Q3: 那非阻塞IO是什么意思?
A:非阻塞IO 就是通过轮询方式 不让线程或者进程 进入阻塞 一直持有CPU资源 的IO操作
二、同步与异步
同步:指的是被调用方做完事情之后再返回;
异步:指的是被调用方先返回,然后再做事情,做完之后再想办法通知调用方。
三、 同步IO 阻塞IO 非阻塞IO IO多路复用
Q:非阻塞IO与IO多路复用为什么是同步的?
A: 非阻塞IO 虽然能够立即返回但是 他需要一直while轮询 这是一个阻塞过程
IO多路复用 select 过程也是一个轮询过程
同步 在这里是指 发起调用 到 从内核态数据拷贝到用户态数据结束过程 是不是需要等待
Q:为什么数据需要从内核态拷贝到用户态?
A: 操作系统把运行中内的内存 分为系统空间和用户空间
操作系统 主要是 进程管理 [创建进程,撤销进程等] 存储管理[分配内存,内存置换] 设备管理 文件管理 这些都是管理的操作都运行在系统空间[内核态]
网络IO 属于设备管理 中需要的 内核程序进行网络通信