问题标签 [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.
scala - Scala 中的错误执行上下文阻止了喷雾 API?
我使用 Spray API 来监听来自服务器的请求。一个特定的 scala 类中的计算最终会阻止 Spray 在整个应用程序中响应。这是对问题的轻微简化,但我可以提供更多信息。如果需要的话。
我添加了这个导入,它解决了我的问题:
谁能解释这是如何或为什么起作用的?
==================================================== =
编辑:
OuterClass 实例化 SomeClass,但它本身从未使用 ExecutionContext 参数实例化。看来它可能默认使用全局执行上下文,这就是为什么它会阻塞呢?
akka - 喷雾的多个调度员
我想知道如何处理这种特殊情况。
我有两个要提供给 Web 应用程序的 ClientService。所谓clientService,我的意思是调用一些外部休息服务的客户端API。所以我们在这里是喷雾客户端。
问题是,这两项服务中的一项可能非常密集且耗时,但调用频率低于另一项,后者会更快但调用非常频繁。
我正在考虑为两个 clientService 设置两个调度程序。假设我们有查询 API (ClientService1) 和分类 API (ClientService2)
这两个服务确实应该基于相同的参与者系统。所以换句话说,我想在我的演员系统中有两个调度程序,然后通过客户端级 api 将它们传递给喷雾,例如管道。
- 是否可行、可扩展且合适?
- 您会推荐什么来代替使用一个调度程序但具有更大的线程池?
- 另外,如何获得调度员?
- 我应该自己创建一个线程池执行器并从中获得一个调度程序吗?
- 如何让演员系统加载/创建多个调度程序,以及如何检索它们以便将它们传递给管道方法?
我知道如何使用特定的调度程序创建一个演员,有例子,但这是一个不同的场景。顺便说一句,我不希望低于客户端级别的 API
编辑
我发现 system.dispatchers.lookup 方法可以创建一个。所以应该这样做。
然而,不清楚的事情与 AKK.IO/SPRAY.IO 有关。
管理器 IO(HTTP):我不清楚它在哪个调度程序上运行,或者是否可以配置。
此外,假设我将不同的执行上下文传递给管道方法。怎么了?我仍然会在默认执行上下文或它自己的执行上下文上运行 IO(HTTP)(我不知道它是如何在内部完成的)?还有什么将在我通过的执行上下文上运行?(换句话说,哪些演员)
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。
.net - .net 事件是否流向当前的 ExecutionContext?
我看到一些关于在 += 样式 .net 事件注册(C#)之前几乎立即抑制执行上下文流的代码优化
为什么?那是因为 .net 事件通常流向当前的执行上下文吗?
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
javascript - 我可以在没有 eval 的全局执行上下文中运行 javascript
我正在编写 php 框架,它提取 Javascript 块以异步合并、缩小和执行它们。
所以我喜欢延迟 Javascript 代码的执行,为此我将 javascript 包装在
这很好用,除非包装的代码需要创建全局变量(我不是包装代码的作者,所以我不想修复该代码)相反我喜欢在全局执行上下文中运行该代码。
例如:
会成为:
现在的解决方案是将javascript放入一个字符串然后
或在我的库中使用 globalEval 调用
但我想坚持使用可读性更好的版本,这对于框架的用户来说也更容易调试。
并通过使用 callback.call(window) 或类似的东西来更改我的库中的执行上下文,这可能吗?
javascript - Javascript中对象成员的创建和初始化顺序
我对 JS 对象中成员的初始化顺序和创建顺序有一些疑问。
据我了解,当调用任何函数时,都会创建一个函数执行上下文。在这些函数中处理代码还有两个阶段:创建和执行。
所以,让我们举个简单的例子:
创建和初始化所有成员的顺序是什么?我知道当我们不使用对象时它是如何工作的:
在这个步骤列表中,this.method是在哪里创建和定义的?我四处寻找并发现在执行阶段,如果我在this.method实际定义之前调用它,则会引发错误(意味着该实例方法尚不存在)。但是,如果我在实例方法内部调用稍后在代码中定义的另一个实例方法,则一切正常: function Main() { var a = "1";
任何人都可以帮助我了解何时创建实例方法以及何时定义它们?JS 中的原型对象如何使执行上下文不同(除了更改this的引用对象)?
谢谢!
javascript - 了解 javascript 提升和执行上下文
我读过“吊装”这个词,但对我来说不是很清楚。为什么当变量设置为未定义时函数会被执行?
有趣的是,变量没有显示任何错误。但它显示未定义。但是当我完全删除变量时,它会显示错误。这意味着,变量存在于某处。正确的?
但是如果它存在,那为什么编译器不能编译它并且可以编译这里的函数呢?
我知道 var a 正在被提升。我想知道为什么引擎以不同的方式处理变量和函数,这就是执行上下文期间幕后发生的事情。
任何详细的解释都将有助于了解引擎如何创建执行上下文。
在这个问题中,我问的是 javascript 引擎对函数和变量的行为有何不同。以及执行阶段的创建状态和执行状态到底发生了什么。所以,这不是一个重复的问题。
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
首先使用/忽略关键字吗?
我倾向于漫无边际,所以我会尝试分解我在答案中寻找的内容:
- 代码!阅读所有这些文档仍然让我感觉自己无法编写阻塞感知上下文,我真的很感激一个例子。
- 关于如何处理阻塞线程的任何链接或提示,即无休止地为它们创建一个新线程,检查可用线程的数量,如果太多则拒绝,其他一些策略
- 我不是在这里寻找性能提示,我知道我只能通过测试来获得它,但是如果我一开始就无法弄清楚如何对上下文进行编码,我就无法测试!我确实找到了 ForkJoins 与线程池的示例,但我错过了
blocking
那里的关键部分。
抱歉,这里的问题很长,我只是想让您了解我在看什么,并且我已经尝试了一天多的时间来解决这个问题,并且需要一些外部帮助。
编辑:为了清楚起见,ElasticSearch 服务的构造函数签名是:
在我的应用程序启动代码中,我有这样的东西:
我也在阅读Play 对 contexts 的建议,但还没有看到任何关于阻止提示的内容,我怀疑我可能需要查看源代码以查看它们是否扩展了BlockContext
特征。