当同步I / O调用还没有返回时,CPU做什么?

CPU是否继续检查某些状态以查看I / O调用是否被返回?

我问这个问题只是因为我想了解为什么asynchronous模式服务器(如nodejs)可以处理更多的并发请求。

如果在没有返回同步I / O调用的情况下CPU空闲,那么服务器可以启动一个新线程来处理新的请求,因为它仍然有足够的CPU资源。

如果你做同步I / O,那么你的进程(或线程)被阻塞,直到操作完成。 这就是为什么叫做同步。 CPU在做什么? 服务其他进程。 大多数现代操作系统的“调度”工作方式也是一样的,所以即使有更多的工作比处理器更多,也不会完全剥夺它们。当I / O导致进程不能运行时,就会发生调度。 如果没有可运行的进程可用,处理器可以闲置一段时间。

asynchronous(又称非阻塞,偶数)I / O是不同的。 在这个过程中,您可以在等待I / O事件的同时做更多的工作。 这就像您在自己的stream程中安排工作,而不是依靠操作系统来select在等待I / O时要做什么工作。 Node.js可以处理很多并发连接,因为所有I / O都是以非阻塞模式完成的,所以单个Node.js进程可以实现单个处理器内核的高度利用,并且永远不会等待任何事情当然是真正的CPU计算,但是大多数的Node.js程序并没有太多的function)。