五种IO模型精简理解

阻塞式IO:一个线程处理一个请求时,若内核还未处理完,则会一直阻塞,知道准备就绪

非阻塞式IO:一个线程处理一个请求时,若内核未处理完则返回error,并未阻塞,我们需要不断循环读取,直到不是error,说明可以了。

IO多路复用:程序注册一组socket文件描述符给操作系统,表示“我要监视这些fd是否有IO事件发生,有了就告诉程序处理”。不断轮询这些文件描述符,若轮询到某一个就绪时,则调用用户线程来读它,后面的就暂时被阻塞。

信号驱动IO:给对应的文件描述符注册一个信号函数,若准备就绪的时候,反馈给用户线程,用户线程接收到信号之后,便在信号函数中调用IO读写操作来进行实际的IO请求操作。

异步IO:用户只需要发起一次请求后,在内核准备数据以及准备好写入用户线程中,然后发个信号通知用户线程,整个过程(准备数据与写入用户线程)不需要用户线程参与,达到真正意义的异步。

整个会有两块可能阻塞:

  • 1.用户线程请求要读的时候

  • 2.用户线程电泳IO函数在读的时候

阻塞式IO:两个都阻塞

非阻塞式IO:虽然1不阻塞,但是需要不断轮询,2仍然阻塞

IO多路复用:1不阻塞,轮询过程由用户态的处理转移到内核态,2仍然阻塞

信号驱动IO:1不阻塞,2阻塞

异步IO:1,2都不阻塞

posted @ 2020-09-10 16:46  程序杰杰  阅读(139)  评论(0编辑  收藏  举报