问题标签 [executioncontext]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
101 浏览

javascript - 返回内部函数时,javascript如何保留外部函数的执行上下文?

我正在阅读这两个博客: David Shariff 发表的执行上下文和作用域深入探讨了 javascript 的执行上下文和作用域链概念。

阅读上述博客后,我不清楚的一件事是 javascript 如何防止父函数的执行上下文被垃圾收集?

让我们看以下非常简单的代码:

当外部函数被调用时,我们得到一个指向内部函数的指针。所以在这个阶段,内部函数被创建/定义,但还没有被调用。

根据博客,只有在调用函数时,才会建立作用域链。所以在调用内部函数之前,我认为没有指针引用外部函数的执行上下文。那么js引擎如何防止外部函数的执行上下文被垃圾回收呢?

0 投票
1 回答
375 浏览

scala - Scala 中的错误执行上下文阻止了喷雾 API?

我使用 Spray API 来监听来自服务器的请求。一个特定的 scala 类中的计算最终会阻止 Spray 在整个应用程序中响应。这是对问题的轻微简化,但我可以提供更多信息。如果需要的话。

我添加了这个导入,它解决了我的问题:

谁能解释这是如何或为什么起作用的?

==================================================== =

编辑:

OuterClass 实例化 SomeClass,但它本身从未使用 ExecutionContext 参数实例化。看来它可能默认使用全局执行上下文,这就是为什么它会阻塞呢?

0 投票
0 回答
273 浏览

akka - 喷雾的多个调度员

我想知道如何处理这种特殊情况。

我有两个要提供给 Web 应用程序的 ClientService。所谓clientService,我的意思是调用一些外部休息服务的客户端API。所以我们在这里是喷雾客户端。

问题是,这两项服务中的一项可能非常密集且耗时,但调用频率低于另一项,后者会更快但调用非常频繁。

我正在考虑为两个 clientService 设置两个调度程序。假设我们有查询 API (ClientService1) 和分类 API (ClientService2)

这两个服务确实应该基于相同的参与者系统。所以换句话说,我想在我的演员系统中有两个调度程序,然后通过客户端级 api 将它们传递给喷雾,例如管道。

  1. 是否可行、可扩展且合适?
  2. 您会推荐什么来代替使用一个调度程序但具有更大的线程池?
  3. 另外,如何获得调度员?
  4. 我应该自己创建一个线程池执行器并从中获得一个调度程序吗?
  5. 如何让演员系统加载/创建多个调度程序,以及如何检索它们以便将它们传递给管道方法?

我知道如何使用特定的调度程序创建一个演员,有例子,但这是一个不同的场景。顺便说一句,我不希望低于客户端级别的 API

编辑

我发现 system.dispatchers.lookup 方法可以创建一个。所以应该这样做。

然而,不清楚的事情与 AKK.IO/SPRAY.IO 有关。

  1. 管理器 IO(HTTP):我不清楚它在哪个调度程序上运行,或者是否可以配置。

  2. 此外,假设我将不同的执行上下文传递给管道方法。怎么了?我仍然会在默认执行上下文或它自己的执行上下文上运行 IO(HTTP)(我不知道它是如何在内部完成的)?还有什么将在我通过的执行上下文上运行?(换句话说,哪些演员)

0 投票
1 回答
584 浏览

javascript - Javascript:了解奇怪的部分 - 功能范围未按描述工作

我试图以一百万种方式重写它,但无法弄清楚 Tony Alicea 如何从这段代码中产生结果 1, 2, undefined, 1:

您可以在https://www.youtube.com/watch?v=Bv_5Zv5c-Ts&t=74m30s看到代码和视频,他执行此操作并生成 1、2、未定义、1。我继续运行它并获得 1, 2,未定义,2。我正在做的事情是否导致 myVar 在全局范围和 a() 的范围内都以 2 的形式存在?我的代码目前发布在https://testing-mdmitchellnyc.c9.io/hello-world.html

0 投票
1 回答
23 浏览

.net - .net 事件是否流向当前的 ExecutionContext?

我看到一些关于在 += 样式 .net 事件注册(C#)之前几乎立即抑制执行上下文流的代码优化

为什么?那是因为 .net 事件通常流向当前的执行上下文吗?

0 投票
1 回答
201 浏览

scala - 未来地图的(等待)执行上下文。使用 FixedThreadPool 停止执行

每个doServiceStuff(name:String)需要 5 秒。doServiceStuff 没有隐式 ex:Execution 上下文作为参数,它在内部使用自己的 ex 上下文并Future {blocking { .. }}对其执行。

最后程序打印:

如果我将 1000 更改为10000,添加更多任务:val ss = (1 to 10000)然后程序停止:

将打印约 17 027 行(共 20 000 行)。不会打印“错误”消息。不会打印“接受”消息

**并且不会再处理任何事情。

但是,如果我将 exContext 更改为ExecutionContext.fromExecutor(null: Executor)(global one),那么 in 会在大约 10 秒内结束(但通常不会)。

这就是问题所在:为什么使用固定的前上下文池它会在没有消息传递的情况下停止,但对于全局前上下文它会终止但有错误和消息传递?

有时..它是不可重现的。

更新:我确实看到了"ERROR""took"如果我将池从 1 增加到 N。不管 N 有多高 - 它仍然会是错误。

代码在这里:https ://github.com/Sergey80/scala-samples/tree/master/src/main/scala/concurrency/apptmpl

在这里,doManagerStuff2()

0 投票
2 回答
124 浏览

javascript - 我可以在没有 eval 的全局执行上下文中运行 javascript

我正在编写 php 框架,它提取 Javascript 块以异步合并、缩小和执行它们。

所以我喜欢延迟 Javascript 代码的执行,为此我将 javascript 包装在

这很好用,除非包装的代码需要创建全局变量(我不是包装代码的作者,所以我不想修复该代码)相反我喜欢在全局执行上下文中运行该代码。

例如:

会成为:

现在的解决方案是将javascript放入一个字符串然后

或在我的库中使用 globalEval 调用

但我想坚持使用可读性更好的版本,这对于框架的用户来说也更容易调试。

并通过使用 callback.call(window) 或类似的东西来更改我的库中的执行上下文,这可能吗?

0 投票
1 回答
209 浏览

javascript - Javascript中对象成员的创建和初始化顺序

我对 JS 对象中成员的初始化顺序和创建顺序有一些疑问。
据我了解,当调用任何函数时,都会创建一个函数执行上下文。在这些函数中处理代码还有两个阶段:创建和执行。

所以,让我们举个简单的例子:

创建和初始化所有成员的顺序是什么?我知道当我们不使用对象时它是如何工作的:

  • 创建新的执行上下文并将其添加到堆栈中
  • 扫描代码以查找函数[除非调用代码,否则不会评估代码——它只是知道那里有一个特定的函数]
  • 所有变量都被提升
  • 这个变量被赋值
  • 执行阶段开始:代码逐行执行(包括所有变量赋值等;如果调用任何函数,则创建另一个执行上下文并重新开始流程)

    在这个步骤列表中,this.method是在哪里创建和定义的?我四处寻找并发现在执行阶段,如果我在this.method实际定义之前调用它,则会引发错误(意味着该实例方法尚不存在)。但是,如果我在实例方法内部调用稍后在代码中定义的另一个实例方法,则一切正常: function Main() { var a = "1";

    任何人都可以帮助我了解何时创建实例方法以及何时定义它们?JS 中的原型对象如何使执行上下文不同(除了更改this的引用对象)?

    谢谢!

  • 0 投票
    4 回答
    127 浏览

    javascript - 了解 javascript 提升和执行上下文

    我读过“吊装”这个词,但对我来说不是很清楚。为什么当变量设置为未定义时函数会被执行?

    有趣的是,变量没有显示任何错误。但它显示未定义。但是当我完全删除变量时,它会显示错误。这意味着,变量存在于某处。正确的?

    但是如果它存在,那为什么编译器不能编译它并且可以编译这里的函数呢?

    我知道 var a 正在被提升。我想知道为什么引擎以不同的方式处理变量和函数,这就是执行上下文期间幕后发生的事情。

    任何详细的解释都将有助于了解引擎如何创建执行上下文。

    在这个问题中,我问的是 javascript 引擎对函数和变量的行为有何不同。以及执行阶段的创建状态和执行状态到底发生了什么。所以,这不是一个重复的问题。

    0 投票
    1 回答
    1222 浏览

    java - 如何创建块感知执行上下文?

    出于某种原因,我无法解决这个问题。我有一个与Play一起运行的应用程序,它调用Elastic Search。作为我设计的一部分,我的服务使用了用 scala future 包装的 Java API,如这篇文所示。我已经更新了该帖子中的代码,以提示 ExecutionContext 它将执行一些阻塞 I/O,如下所示:

    我构造查询以发送到 ES 的实际服务将 executionContext 作为构造函数参数,然后用于调用弹性搜索。我这样做是为了让 play 使用的全局执行上下文不会因为对 ES 的阻塞调用而束缚住它的线程。这个 SO 评论提到只有全局上下文是阻塞感知的,所以我不得不创建自己的。在同一个帖子/答案中,有很多关于使用 ForkJoin 池的信息,但我不确定如何将这些文档中的内容与阻塞文档中的提示结合起来,以创建响应阻塞的执行上下文提示。

    我认为我遇到的一个问题是我不确定首先如何响应阻塞上下文?我正在阅读最佳实践,它使用的示例是无限的线程缓存:

    请注意,这里我更喜欢使用无界的“缓存线程池”,因此它没有限制。在进行阻塞 I/O 时,想法是您必须有足够的线程可以阻塞。但是,如果 unbounded 太多了,根据用例,您可以稍后对其进行微调,这个示例的想法是让球滚动。

    那么这是否意味着对于我的 ForkJoin 支持的线程池,我应该在处理非阻塞 I/O 时尝试使用缓存线程并为阻塞 IO 创建一个新线程?或者是其他东西?我在网上找到的关于使用单独线程池的几乎所有资源都倾向于执行Neophytes 指南所做的事情,也就是说:

    如何调整各种线程池高度依赖于您的个人应用程序,超出了本文的范围。

    我知道这取决于您的应用程序,但在这种情况下,如果我只想创建某种类型的阻塞感知 ExecutionContext 并了解管理线程的体面策略。如果上下文专门针对应用程序的单个部分,我应该只制作固定的线程池大小而不是blocking首先使用/忽略关键字吗?

    我倾向于漫无边际,所以我会尝试分解我在答案中寻找的内容:

    1. 代码!阅读所有这些文档仍然让我感觉自己无法编写阻塞感知上下文,我真的很感激一个例子。
    2. 关于如何处理阻塞线程的任何链接或提示,即无休止地为它们创建一个新线程,检查可用线程的数量,如果太多则拒绝,其他一些策略
    3. 我不是在这里寻找性能提示,我知道我只能通过测试来获得它,但是如果我一开始就无法弄清楚如何对上下文进行编码,我就无法测试!我确实找到了 ForkJoins 与线程池的示例,但我错过了blocking那里的关键部分。

    抱歉,这里的问题很长,我只是想让您了解我在看什么,并且我已经尝试了一天多的时间来解决这个问题,并且需要一些外部帮助。


    编辑:为了清楚起见,ElasticSearch 服务的构造函数签名是:

    在我的应用程序启动代码中,我有这样的东西:

    我也在阅读Play 对 contexts 的建议,但还没有看到任何关于阻止提示的内容,我怀疑我可能需要查看源代码以查看它们是否扩展了BlockContext特征。