代码之家  ›  专栏  ›  技术社区  ›  Tim unnamed eng

与posix aio一起使用的文件描述符是否需要用“open()”中的“o_nonblock”打开?

  •  0
  • Tim unnamed eng  · 技术社区  · 7 年前

    当对文件描述符使用POSIX AIO时,是否需要使用打开文件描述符 O_NONBLOCK 在里面 open() ?

    在apue中,我没有发现它明确地说是或否,但是我没有发现这样的文件描述符是用 不阻塞 在里面 打开() 在一个例子中。

    谢谢。

    1 回复  |  直到 7 年前
        1
  •  3
  •   John Bollinger    7 年前

    由于您认为您不清楚非阻塞I/O和异步I/O之间的关系和区别:

    • 在非阻塞模式下打开的文件上的I/O操作不会阻塞,即使没有数据可以立即传输。如果他们传输的数据比请求的少(或者根本没有),那么由调用者稍后再试(如果他们愿意)。没有排队等待稍后的操作。

    • POSIX AIO接口提供了要执行的I/O操作 异步 关于调用方线程。所有呼叫返回而不等待I/O, 当在不同的执行上下文中尝试I/O时 . 呼叫方可以安排以各种方式通知操作完成(或不完成)。同时,它可以执行它想要的任何其他工作。

    它们之间没有特殊的关系。POSIX规范都没有,例如 those for aio_read() 也不 the Linux manual for the POSIX AIO interfaces 记录执行AIO的文件处于非阻塞模式的任何要求,也不定义处于阻塞模式的情况下的任何错误条件。不需要非阻塞模式。

    事实上,尽管允许这样做,但在非阻塞文件上执行AIO甚至不会特别有用。如果您可以依赖操作而不阻塞,那么异步执行它会获得什么好处?AIO的要点是调用者不必等待,而是执行I/O。