Operating system 同步和异步I/O之间的区别

Operating system 同步和异步I/O之间的区别,operating-system,Operating System,我一直在学习操作系统的内部结构,对于同步和异步I/O之间的基本区别感到困惑。 操作系统如何知道它是同步的还是异步的?同步I/O意味着某些执行流(如进程或线程)正在等待操作完成。异步I/O意味着没有任何东西等待操作完成,而操作本身的完成会导致某些事情发生 同步I/O——启动I/O的某些执行载体(如进程或线程)也会等待I/O完成(可能会完成)。当I/O完成时,相同的执行工具继续执行其他操作,可能使用I/O的结果 例如: int i = read (file_handle, buffer, lengt

我一直在学习操作系统的内部结构,对于同步和异步I/O之间的基本区别感到困惑。

操作系统如何知道它是同步的还是异步的?

同步I/O意味着某些执行流(如进程或线程)正在等待操作完成。异步I/O意味着没有任何东西等待操作完成,而操作本身的完成会导致某些事情发生

同步I/O——启动I/O的某些执行载体(如进程或线程)也会等待I/O完成(可能会完成)。当I/O完成时,相同的执行工具继续执行其他操作,可能使用I/O的结果

例如:

int i = read (file_handle, buffer, length);
if (i <= 0)
      return;
// handle results
async_read (file_handle, buffer, length, completion_handler);
// do other stuff having nothing to do with the read

...

completion_handler(int count)
{
    if (count < 0)
         return;
    // handle results
}
在这里,对
async\u read
的调用启动读取操作。启动操作的线程可以继续完全执行其他操作。当操作完成时,实现调用
completion\u handler
(可能由另一个线程调用),以获取操作的结果

一般来说,操作系统不必知道哪个是哪个。例如,您可以只实现异步操作,并让完成处理程序取消阻止同步线程。通常,在幕后,它们看起来都是一样的,当操作完成时调用某段代码,执行所有必须执行的操作

你可以很容易地把其中一个变成另一个

如果您只有异步操作,并且想要同步操作,那么只需调用异步操作,然后阻塞完成处理程序取消阻止的内容


如果您只有同步操作,并且想要一个异步操作,只需创建一个新线程来调用同步操作,并让它在同步操作返回时调用完成处理程序。

Awesome answer!