什么是非io阻塞
io模型指的是同时操作socket 的方案
-
阻塞
-
一个线程负责一个socket,阻塞,内核等待。
-
同步读写socket,线程陷入内核态
-
当读写成功后,切回用户态,继续执行
缺点:内核态切换开销大
优点:简单
-
-
非io阻塞
如果暂时无法收发数据,会返回错误
应用会不断轮训,直到socket可以读写
优点:不会陷入内核态,自由度高
缺点:需求自旋轮训
一个线程可以开多个socket 处理
-
多路复用
- 注册多个socket事件
- 调用epoll,当有事件发生,返回
- 优点:提供了事件列表,不需要查询各个socket
- 缺点:开发难度大,逻辑复杂
- linux epoll ,Mac:kqueue ,windows:iocp