redis
IO模型都有哪几种(非阻塞IO)?
❒ 非阻塞I0的recvfrom操作会立即返回结果而不是阻塞用户进程 ☪ 阶段一: ✔ 用户进程尝试读取数据(比如网卡数据) ✔ 此时数据尚未到达,内核需要等待数据 ✔ 返回异常给用户进程 ✔ 用户进程拿到error后,再次尝试读取 ✔ 循环往复,直到数据就绪 ☪ 阶段二: ✔ 将内核数据拷贝到用户缓冲区 ✔ 拷贝过程中,用户进程依然阻塞等待 ✔ 拷贝完成,用户进程解除阻塞,处理数据 可以看到,非阻塞10模型中,用户进程在第一个阶段是非阻塞,第二个阶段是阻塞状态。虽然是非阻塞,但性能并没有得到提高。而且忙等机制会导致CPU空转,CPU使用率暴增。
✔ 采用不停的轮循,去判断是否有客户端的连接,是否有数据的收发,不需要阻塞在那一块,但是需要不停的轮循遍历,浪费系统资源。