一、阻塞非阻塞/同步异步概念
涉及的角色:调用双方/双方的执行者
阻塞和非阻塞是对同一个线程来说的,在某个时刻,线程要么处于阻塞,要不处于非阻塞。
同步和异步是指:发送方和接收方是否协调步调一致。
二、BIO ---阻塞IO的含义
- 阻塞(blocking)IO:资源不可用时,IO请求一直阻塞,直到反馈结果(有数据或超不可用时)
- 非阻塞(non-blocking)IO:资源不可用时,IO请求离开返回,返回数据标识资源不可用。
- 同步(synchronous)IO:应用阻塞在发送或接收数据的状态,直到数据传输成功或返回结果。
- 异步(asynchronous)IO:应用发送或接收数据后立刻返回,处理结果通过回调来通知。
三、5种IO模式
- 阻塞IO模型:Socket 面向字节流。
- 非阻塞IO模型:面向缓冲API。
- IO复用模型:linux底层:select,poll:返回后遍历文件描述符来获取已经就绪的socket;epoll,kqueue:不需要遍历,注册了一个事件函数。
- 信号驱动IO模型
- 异步IO模型:AIO事件模型,IOCP支持比较。