CPU 是否持续检查某些状态以查看 I/O 调用是否返回?
我问这个问题只是因为我想了解为什么异步模式服务器(如nodejs)可以处理更多并发请求。
如果在同步 I/O 调用未返回时 CPU 只是空闲,那么服务器可以启动一个新线程来处理新请求,因为它仍然有足够的 CPU 资源。
最佳答案
如果您执行同步 I/O,那么您的进程(或线程)将被阻塞,直到操作完成。这就是为什么它被称为同步。这段时间内CPU在做什么?为其他进程提供服务。就像大多数现代操作系统"dispatch"多个进程的工作一样,即使作业数量多于处理器,它们也不会被完全剥夺,当 I/O 导致进程不再可运行时,就会发生调度。如果没有可用的可运行进程,处理器可以闲置一段时间。
异步(又名非阻塞、事件)I/O 是不同的。在那里,在单个进程中,您可以在等待 I/O 事件的同时执行更多工作。这就像您在自己的进程中安排工作,而不是根据操作系统来选择等待 I/O 时要执行的工作。 Node.js 可以处理许多并发连接,因为所有 I/O 都是以非阻塞模式完成的,因此单个 Node.js 进程可以实现单个处理器核心的高利用率,并且永远不会卡在等待任何事情(除了当然,这是真正受 CPU 限制的计算,但大多数 Node.js 程序都没有太多这样的计算)。
关于node.js - 当同步 I/O 调用尚未返回时 CPU 正在做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25699234/