美文网首页
IO:同步异步以及阻塞和非阻塞

IO:同步异步以及阻塞和非阻塞

作者: packet | 来源:发表于2018-07-20 20:01 被阅读0次

    首先要有IO的一些基础知识。

    IO是指输入输出,在CPU和IO设备之间进行(比如硬盘,键盘,显示器等)。

    IO是一个底层操作,需要操作系统的支持。

    各种IO设备的数据传输速率各异,操作系统的作用就是屏蔽和管理这些差异(利用缓存),此外还要进程数据格式的转换。

    IO设备:块设备(可寻址,支持随机存取)、字符设备(不可寻址,不支持随机存取)。

    IO设备分为机械部分和电子部分(控制部分),设备控制器上有设备寄存器,这些寄存器与CPU交互。此外还有 缓冲区。

    一个IO操作分成两个部分:1)发起IO请求;2)实际的IO操作。(这就是一次系统调用System call)
    对于一个套接字上的输入操作,第一步通常涉及等待数据从网络中到达。当所有等待分组到达时,它被复制到内核中的某个缓冲区。第二步就是把数据从内核缓冲区复制到应用程序缓冲区。 好,下面我们以阻塞套接字的recvfrom的的调用图来说明阻塞

    同步和异步是不同的消息通信机制,关注的是第二个步骤。同步发起一个请求后,如果没有响应,是不能返回的,一旦返回就拿到了返回值。而异步调用则不必等待响应,可以直接返回,让被调用者去通知调用者,或者用回调函数处理。

    阻塞和非阻塞关注的是第一个步骤,即调用者在等待调用结果时的状态。阻塞是指在得到返回结果之前,调用线程被挂起,而非阻塞则不会挂起,但是需要轮询调用结果是否返回(会有一些CPU的浪费)。

    JAVA的IO有三种:BIO:同步阻塞,NIO:同步非阻塞,AIO:异步非阻塞。

    通过厘清这两组概念,我们应该对调用者和被调用者有更深的认识(程序和程序之间最常见就是调用和被调用的关系)。写到这里,想起来操作系统和用户程序之间的关系,他们互为调用者和被调用者(可参考《现代操作系统》)。

    2019-04-22补充:
    同步和异步关注的是消息通信机制
    阻塞和非阻塞关注的是调用者在等待调用结果(消息,返回值)时的状态.
    参考:https://www.zhihu.com/question/19732473

    相关文章

      网友评论

          本文标题:IO:同步异步以及阻塞和非阻塞

          本文链接:https://www.haomeiwen.com/subject/hioqmftx.html