作为事件驱动的服务器,为什么node.js需要异步代码而Nginx没有?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了作为事件驱动的服务器,为什么node.js需要异步代码而Nginx没有?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1601字,纯文字阅读大概需要3分钟。
内容图文
![作为事件驱动的服务器,为什么node.js需要异步代码而Nginx没有?](/upload/InfoBanner/zyjiaocheng/961/9071c128b7304f3eb0d63becc15cce61.jpg)
问题出在标题中.换句话说,如果Nginx作为node.js的事件驱动异步IO模型,它为什么不需要编写异步样式代码?我知道,Nginx实际上并没有执行任何代码,而是将它们代理给谁.那为什么节点不这样做呢?我们在当前的Ngninx方式中遗漏了什么吗?或者,从节点获得更多东西(除了编写异步代码的痛苦)?
PS.
更具体地说,Nginx php-fpm或Nginx wsgi python / ruby??与节点的性能或利用节点声称的计算资源有何不同?节点是否只能使用现有的FastCGI模型,是同步样式的JavaScript解释器,让webserver执行异步作业?
解决方法:
来自NodeJS谷歌群组的交叉发布:
好的,我会尽力回答你的问题:
Nginx是一个仅代理请求的Web服务器.现在,如果您以Nginx php fpm或Nginx wsgi ruby??为例,您将拥有一个异步,即时的Web服务器,它位于同步执行的Web服务器之前.因此Nginx将尽可能多地接受()连接,并且所有连接都将排队.从Nginx到后端同步服务器的请求将是异步的.但是你的后端同步服务器也接受()不排队任何连接.它一次只能提供一个请求(考虑到你是单线程),一次多个请求(prefork / fork(慢)/多线程 – > gt有自己的缺点,比如线程创建时间(可以通过线程池避免)但PITA实现),上下文切换,线程死锁,连接数accept()ed永远不会大于线程数等)
想象一下,你有2条路由到你的后端服务器Nginx正在击中:
/ 404,/ login.
如果/ login路由正在执行大量I / O,并且如果对/ 404发出另一个请求,则/ 404页面的呈现将取决于/ login的请求的完成(因为该进程被阻止).所以基本上对任何请求的响应将取决于花费最长时间进行I / O的请求.因此,即使Nginx是异步的,并且它的任何请求的响应时间都将完全取决于那个花费最长时间才能完成的请求(罪魁祸首:同步后端服务器).
现在,如果你以NodeJS为例,一切都是异步和事件.无论是文件/网络I / O等,都没有阻止这个过程.因此,采用前面的示例,即使/ login路由正在执行大量I / O,也会立即呈现所有异步和/ 404页面.
我的解释非常简陋.但我认为它应该让你更清晰.
内容总结
以上是互联网集市为您收集整理的作为事件驱动的服务器,为什么node.js需要异步代码而Nginx没有?全部内容,希望文章能够帮你解决作为事件驱动的服务器,为什么node.js需要异步代码而Nginx没有?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。