为什么nginx和node.js的底层循环不占CPU?

对nginx和node.js的底层实现不是很清楚,有比较模糊的认识,应该是循环事件队列,来达到单线程处理多个来自客户的连接吧?
我们自己写一个循环,一般CPU会占用到100%,为什么nginx和node.js这类的循环不会占用太多CPU?
在不占用很多CPU的同时,又如何保证高性能和低延迟?

阅读 4.7k
2 个回答

他们的循环是系统级 中断, 没有事件通知进程,进程就是挂起状态, 就像 socket的 accept 函数, 没有连接进来就会一直被阻塞在accept这里

这类循环并不单纯是你直接写出的循环,你直接写的循环中只有Cpu运算代码,自然会挤爆Cpu。而事件循环是依赖物理事件中断的,也就事件不发生,这个程序(或者是单个线程)是处于挂起状态的,所以自然不会占用Cpu。我们常用循环的目的是为了实现一些带有循环的算法以及操作,而事件循环中循环的主要目的只是为了在处理完一个事件后再去监听下一个事件。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进