Asynchronous 阻塞、非阻塞和异步I/O

Asynchronous 阻塞、非阻塞和异步I/O,asynchronous,io,blocking,nonblocking,Asynchronous,Io,Blocking,Nonblocking,我一直在阅读不同类型的I/O,并开始思考为什么操作系统不只是实现非阻塞I/O,而是通过繁忙的等待来模拟阻塞I/O 我想到的一个原因可能是CPU周期的浪费 有什么想法吗?一个例子——忙着等待:然后让控制台24小时不间断地等待用户输入,这会白白占用大量cpu。如果您是一个多处理器,有几十个终端忙着等待,那么就没有剩余的cpu用于其他任何事情。阻塞在cpu方面效率更高。操作系统通常通过上下文切换或事件或信号(如SIGIO)唤醒休眠进程,具体取决于操作系统。鉴于大多数应用程序在等待I/O的大部分时间是如

我一直在阅读不同类型的I/O,并开始思考为什么操作系统不只是实现非阻塞I/O,而是通过繁忙的等待来模拟阻塞I/O

我想到的一个原因可能是CPU周期的浪费


有什么想法吗?

一个例子——忙着等待:然后让控制台24小时不间断地等待用户输入,这会白白占用大量cpu。如果您是一个多处理器,有几十个终端忙着等待,那么就没有剩余的cpu用于其他任何事情。阻塞在cpu方面效率更高。操作系统通常通过上下文切换或事件或信号(如SIGIO)唤醒休眠进程,具体取决于操作系统。鉴于大多数应用程序在等待I/O的大部分时间是如何度过的,这确实是对CPU周期的浪费。这是我能想到的唯一原因。一个更相关的问题可能是为什么存在阻塞I/O——非阻塞和异步涵盖所有用例!浪费cpu周期真的很重要。例如,当您使用web服务器时,使用synch io会显著降低您的性能。有必要指出,使用非阻塞io需要非常注意RAM,对于粗心的程序员来说,这可能会带来漏洞。异步的另一个要点是,当您使用多核系统时,同步使用线程和线程以及访问非常有用。