问题标签 [future]
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 Future 阻塞线程?
当我等待Scala Future 的结果时,它的行为更像是receive还是像react一样,即它是阻塞线程,还是在结果可用时安排继续?
java - 在 Java 中获取 Futures 的 ID
我有以下代码:
正如代码中所指出的......我怎么知道哪个 Future 超时?
谢谢
scala - 如何处理 Scala Futures 中的异常?
我实现了一个简单的作业处理器来处理期货中的子作业(scala.actors.Futures)。这些期货本身可以为处理子作业创建更多期货。现在,如果其中一个子作业引发异常,我希望作业处理器回复该作业的错误消息。我有一个发现失败子作业的解决方案,但我不确定这是否是最好的解决方案。基本上它是这样工作的:
顶层的结果是 JobResults 的 Lists of Lists... 的递归 List。我递归地在列表中搜索失败的结果,然后根据结果的类型返回错误或组合结果。那行得通,但我想知道是否有更优雅/更简单的解决方案来处理期货中的异常?
java - Future.cancel 和 ReentrantLocks
设想
比方说,我有这个类,Foo
它的唯一工作是顺序执行一组任务。听起来很简单,对吧?好吧,所有这些任务都在各自独立的线程中执行。它不是简单地调用Thread.join()
每个任务来确保顺序执行,而是使用 aReentrantLock
和Condition
。例如,
在每个任务之后,waitForNotification()
都会调用并等待另一个类,比如说Bar
,唤醒它。唯一的工作Bar
是处理通知应用程序任务是通过还是失败的响应。话虽如此,它将做以下两件事之一:
- 完全取消线程(即
getTask().cancel
) - 唤醒线程(即
getCondition().signal
)
第 2 项工作得很好,但第 1 项不行。例如,
而不是取消线程,它似乎只是中断了它,这导致它Foo
继续执行。抱歉冗长,但我想给你们一个清晰的画面。有什么建议么?
java - Java Futures 的无序返回
我能想到的使用 Java Futures ( java.util.concurrent.Future<T>
) 运行多个类似进程 (SIMD) 的唯一模型如下:
该模型的问题在于,如果作业 0 需要很长时间才能完成,但作业 1、2 和 3 已经完成,则for
循环将等待从作业 0 获取返回值。
是否有任何模型可以让我在每个Future
结果可用时获得每个结果,而无需调用Future.isDone()
和忙于等待(或调用Thread.sleep()
)(如果还没有准备好)?
scala - Scala中多个Futures的奇怪案例
Scala 中那些与 Future 相关的类和特征之间有什么联系,为什么它们散布在不同的包上?
我找到了那些:
它们是否有明显不同的东西,还是有其他原因导致它们无法合并?
有没有一个很好的例子来展示一个人何时会使用一件事或另一件事?
编辑:赏金用于解释每个类/特征/对象的作用以及它们如何证明它们的存在/它们如何有用。
c++ - 开发具有“未来”或类似范式的 C++ 并发库
我正在开发一个需要在线程池中运行许多作业的 C++ 项目。这些作业容易失败,这意味着我需要知道每个作业在完成后是如何终止的。大多数情况下,作为一名 Java 程序员,我喜欢使用“futures”或类似范例的想法,类似于 Java 的 util.concurrent 包中的各种类。
我有两个问题:首先,C++ 是否已经存在类似的东西(我在 Boost 中没有找到任何东西,但也许我还不够努力);其次,这对 C++ 来说是不是一个理智的想法?
我在这里找到了我要完成的工作的一个简短示例:
http://www.boostcookbook.com/Recipe:/1234841
这种方法有意义吗?
multithreading - 在 Linux 2.6+ 中替换系统调用(syscalls)
我正在考虑编写一个用户态线程库,因为在这个领域似乎没有积极的工作,我相信 C++0x 的承诺和未来可能会给这个模型一些力量。不幸的是,为了使这个模型工作,必须确保阻塞调用的上下文切换。因此,我想拦截每个系统调用,以便用异步版本替换它。有一些警告:
- 我知道几乎每个常规系统调用都有异步系统调用,但出于向后兼容性的原因,这不是一个可行的解决方案。
- 我知道在 Linux 2.4 或更早版本中可以直接更改 sys_call_table,但这已经消失了。
- 因为我希望我的库在需要时被静态链接,所以 LD_PRELOAD 技巧是不可行的。
- 同样,内核模块也不是一个选项,因为它应该是一个用户态库。
- 最后,出于类似原因, ptrace() 也不是一个选项。我不能让我的图书馆为了使用而分叉一个新进程。
这可能吗?
c# - 我的通用 Future 实现应该有一个 Completed 事件吗?
我正在编写一个通用Future<T>
类,它封装了异步获取值,我注意到网络上大多数现有的实现都有这样的合同:
这立即让我想在实现中添加一个 Completed 事件,这样当我想要异步获取值并知道它何时完成时,我不必轮询该值。我注意到并行编程库以这种方式实现期货,但我很好奇为什么很多实现都没有这个事件。我错过了什么吗?Futures 是否应该有 Completed 事件?还是仅取决于您的上下文?
c++ - 如何反转 set_value() 并“停用”承诺?
我在这里有一个关于同步的总 n00b 问题。我有一个'writer'线程,它在每次迭代时为一个promise分配一个不同的值'p'。我需要'reader'线程等待这个值的shared_futures然后处理它们,我的问题是我如何使用future/promise来确保reader线程在执行他们的处理任务之前等待'p'的新更新每次迭代?非常感谢。