我们都知道NodeJ可以处理比普通Java服务器更多的请求, 但是如何为传入请求维护FIFO类型的结构呢?
让我们说一个闪光灯销售,成千上万的请求在短时间内轰炸购买数量有限的东西?
我们如何确定哪个请求首先获得产品并将产品状态从available
更改为sold out
(仅作为示例)?
由于
答案 0 :(得分:1)
在node.js中,一次只有一个请求实际运行(Javascript解释器是单线程的),直到您在本机代码中遇到某种异步操作,然后另一个请求开始运行而另一个请求正在等待I / O。如果所有请求都有一些有限的资源,那么通过代码获取资源可以看到哪个请求足够远。如果您为服务器群集以获得额外的可伸缩性,那么每个群集都会运行一个Javascript线程。
如果你让每个传入的请求在队列中等待,直到它之前的所有其他请求完全完成(可以做的事情),那么你就会严重破坏你的node.js服务器和大多数服务器的可扩展性当它处于空闲状态等待一些I / O操作时,这似乎不太可能是正确的设计。
让我们说闪光灯销售,其中成千上万的请求轰炸 购买数量有限的东西的时间量?
我们如何决定首先获得产品的请求 将产品的状态从可用状态更改为售完状态(仅限一个 例子)?
这里通常的方案是让第一个请求通过声明资源的请求(即使多个资源可能同时运行)。这是否总是首先到达您的服务器的请求是不会被知道的,但它将是关闭的,并且用户社区不太可能知道它是否恰好在几毫秒内被关闭仅仅是由于处理两个请求的速度。
您必须确保访问共享资源(如数据库)的代码对于并发是安全的,并且不会对共享数据做出任何麻烦的假设。