大家好,我迟到了。
接下来,我们可以尽可能简单地介绍Node.js如何实现异步资源上下文共享,以及对我们的异步资源上下文共享的用途是什么。
异步资源的上下文共享意味着上下文数据在网络请求生命周期或异步资源呼叫链中共享。
在回答这个问题之前,我们必须首先了解什么是异步资源。
异步资源可以理解为回调的对象,例如但不限于承诺,超时,TCPWRAP,UDP等。有关详细信息,请参阅异步资源的类型。
官方定义如下:
被封闭的beface调用了回调。
这是Node.js提供的异步上下文共享解决方案。该特征的异步态仍然是16.4.0之前的实验特征,并且在16.4.0之后一直保持稳定。
AsynClocalStorage可以在异步操作链中共享数据。
AsynClocalStorage实例AsynClocalStorage具有以下主要方法:
例子:
AsynClocalStorage.run()函数的第一个参数是存储我们需要在异步调用中访问的数据。第二个参数是异步函数。
以下示例用于演示如何使用AsynClocalStorage来实现异步资源上下文共享:
输出:
在由AsynClocalStorage.run运行的同步函数中,函数runa和function runb将运行函数runa和函数。Runa和Runb可以访问相同的上下文数据。
AsynClocalStorage为我们提供了很多遍历,使我们可以轻松地在Node.js中实现异步资源,但是每个异步资源操作都会触发异步挂钩,这将不可避免地影响我们的节点应用程序性能。那么影响有多大?
根据对Kuzzle的实际测量,使用异步线可能会造成8%的额外性能损失。当然,不同的业务场景可能具有不同的性能。如果您注意这一绩效的部分,则还可以在自己的业务中添加比较测试并测试特定的绩效效果。
req/s 2613 2842?8%在其他多线程语言中,每种HTTP创建一个新线程,每个线程都有其自己的内存。代码。
在node.js中,由于node.js是单线线程,因此将在所有HTTP请求中共享内存,因此每个HTTP请求不能彼此分开。
异步呈现能力可以有效地隔离不同的异步操作之间的状态。它具有非常重要的功能,例如HTTP请求跟踪,APM工具,上下文日志跟踪和基于请求的完整-link日志跟踪。
原始:https://juejin.cn/post/7101560239622717470