对nginx和node.js的底层实现不是很清楚,有比较模糊的认识,应该是循环事件队列,来达到单线程处理多个来自客户的连接吧?
我们自己写一个循环,一般CPU会占用到100%,为什么nginx和node.js这类的循环不会占用太多CPU?
在不占用很多CPU的同时,又如何保证高性能和低延迟?
对nginx和node.js的底层实现不是很清楚,有比较模糊的认识,应该是循环事件队列,来达到单线程处理多个来自客户的连接吧?
我们自己写一个循环,一般CPU会占用到100%,为什么nginx和node.js这类的循环不会占用太多CPU?
在不占用很多CPU的同时,又如何保证高性能和低延迟?
这类循环并不单纯是你直接写出的循环,你直接写的循环中只有Cpu运算代码,自然会挤爆Cpu。而事件循环是依赖物理事件中断的,也就事件不发生,这个程序(或者是单个线程)是处于挂起状态的,所以自然不会占用Cpu。我们常用循环的目的是为了实现一些带有循环的算法以及操作,而事件循环中循环的主要目的只是为了在处理完一个事件后再去监听下一个事件。
2 回答1.6k 阅读✓ 已解决
1 回答826 阅读✓ 已解决
他们的循环是系统级 中断, 没有事件通知进程,进程就是挂起状态, 就像 socket的 accept 函数, 没有连接进来就会一直被阻塞在accept这里