我知道像Rails这样的“阻塞”服务器体系结构要求您将时间密集的外部API调用卸载到工作进程(即作业队列),以防止它们阻止服务器进程。
node.js也是如此吗?或者它的“非阻塞”架构是否意味着它可以在不拒绝或减慢后续服务器请求的情况下进行不完整的外部API调用?
答案 0 :(得分:1)
node.js的非阻塞性质和node.js中底层网络的实现不使用线程进行外部API调用,对于该类型的访问是一种非常有效的实现。
node.js也是如此吗?或者它的"非阻塞" 体系结构意味着它可以具有不完整的外部API调用 进度而不拒绝或减慢后续服务器请求?
不,node.js不是这种情况。网络的非阻塞性质将为您处理此问题而不会出现任何“减速”问题。后果。
当然,每个开放套接字和node.js本身都会消耗一些系统资源。它本身可以对它将同时打开的套接字数施加一些限制(我认为http
模块有一个限制内置的,可以配置),但这只是意味着你要么必须确保你不会开始大量的未完成的套接字打开或者你仔细调整你的情况的配置设置。
为了完成图片,node.js中有一些类型的I / O(例如文件I / O)使用内部线程池,文件I / O的非阻塞性质通过实际的线程,虽然这对node.js程序员几乎完全透明。但是,node.js中的网络没有以这种方式实现(它使用实际的非阻塞套接字)。