阻塞式编程和非阻塞式编程

  • 阻塞IO的含义
    1. 阻塞(blocking)IO:资源不可用时,IO请求一直阻塞,知道反馈结果(有数据或者超时)。
    2. 非阻塞(non-blocking)IO:资源不可用时,IO请求离开返回,返回数据标识资源不可用。
    3. 同步(synchronous)IO:应用组社发送或接受说句状态,知道数据成功传输或返回失败。
    4. 异步(asynchronous)IO:应用发送或接受数据后立刻返回,实际处理是异步执行的。

阻塞和非阻塞是获取资源的方式。同步/异步是程序如何处理资源的逻辑设计。

代码中使用的API:ServerSocket#accept、InputStream#read都是阻塞的API。操作系统底层API中,默认操作都是Blocking型。sent./rec等接口都是阻塞的。

带来的问题:阻塞导致处理网络I/O时,一个线程只能处理一个网络连接。