关于计算机科学:什么是期货?

关于计算机科学:什么是期货?

What are futures?

什么是期货? 这与懒惰的评估有关。


维基百科上有一篇关于期货的文章。简而言之,这是一种使用未知值的方法。然后可以按需计算值(延迟评估),并且可以选择与主要计算同时进行。

C ++示例如下。

假设您要计算两个数字的和。您可以使用典型的渴望实现:

1
2
3
int add(int i, int j) { return i + j; }
// first calculate both Nth_prime results then pass them to add
int sum = add(Nth_prime(4), Nth_prime(2));

或者,您也可以使用C ++ 11的std::async来返回std::future,从而使用Future方式。在这种情况下,add函数仅在尝试使用尚未计算的值时才会阻塞(也可以创建纯惰性的替代方法)。

1
2
3
int add(future<int> i, future<int> j) { return i.get() + j.get(); }
int sum = add(async(launch::async, [](){ return Nth_prime(4); }),
              async(launch::async, [](){ return Nth_prime(2); }));

创建未来时,将启动一个新的后台线程,该线程开始计算实际值。如果您请求Future的值,它将阻塞直到线程完成计算。当您需要并行生成一些值并且不想手动跟踪所有值时,这非常有用。

有关Ruby或Scala,期货和惰性评估,请参见lazy.rb。

它们可能可以用任何具有线程的语言来实现,尽管用C之类的低级语言显然要比使用高级功能语言要困难得多。


每个人都出于懒惰计算的目的提到期货。但是,另一个不如广告宣传的用途是使用Future for IO。特别是它们对于加载文件和等待网络数据很有用


Future封装了延迟的计算,通常用于将懒惰求值转换为非懒惰语言。第一次评估future时,将运行评估该future所需的代码,并将future替换为结果。

由于将来已被替换,因此后续评估不会再次执行代码,而只会产生结果。


这篇博客文章给出了非常详尽的解释,并提供了有关如何自己实现未来的示例。我真的推荐它:)


期货还用于某些设计模式,特别是用于实时模式,例如ActiveObject模式,该模式将方法调用与方法执行分开。设置将来以等待完成的执行。当您需要从多线程环境转移到与单线程环境进行通信时,我倾向于看到它。在某些情况下,某些硬件不支持线程内核,并且在这种情况下使用期货。乍一看,您如何沟通并不明显,而令人惊讶的是,期货使交易变得相当简单。我有一些C#代码。我将其挖掘出来并发布。


Wiki文章很好地概述了期货。该概念通常在并发系统中使用,用于对可能尚未计算出的值以及可能已经或可能尚未进行计算的值进行调度。

从文章:

A future is associated with a
specific thread that computes its
value. This computation may be started
either eagerly when the future is
created, or lazily when its value is
first needed.

在本文中未提及,期货是Monad,因此可以将期货价值的函数投影到monad中,以便在可用时将其应用于期货价值,从而产生另一个期货,而期货又表示该函数的结果。


推荐阅读

    计算机主板BIOS设置详细-BIOS知识

    计算机主板BIOS设置详细-BIOS知识,,什么是电脑BIOS,一般电脑主板已经设置完毕后,电脑就开始按del键进入BIOS。系统启动BIOS,即微机的基本输入

    计算机蓝屏故障的计算机蓝屏解决方案

    计算机蓝屏故障的计算机蓝屏解决方案,,电脑蓝屏电脑故障经常使用电脑的朋友经常遇到,因为电脑蓝屏是一个非常普遍的现象,所以很难预测,什么时

    计算机自动关机的原因是什么

    计算机自动关机的原因是什么,,计算机(计算机),通常称为计算机,是一种用于高速计算的电子计算机。它可以进行数值计算和逻辑计算,还具有存储记忆

    电脑功率计算|电脑功率计算公式

    电脑功率计算|电脑功率计算公式,,电脑功率计算公式  从设计角度出发一般取300w/台基本都可以满足要求,可以从以下几个方面分析一下电脑功

    如何设置计算机视图视图的统一视图

    如何设置计算机视图视图的统一视图,,不知道你是否有这样的使用电脑经验,电脑在不同的文件夹打开,有时这个文件夹是用来查看列表的方式,但是当

    的故障_计算机解决无法打印文档

    的故障_计算机解决无法打印文档,,核心提示:最近,打印机出现了一个奇怪的现象,在打印正常之前,打印机不能打印最近的突然,提示发送打印作业,计算

    wps插入罗马字符页码|wps插入罗马数字

    wps插入罗马字符页码|wps插入罗马数字,罗马,页码,插入,字符,1.wps怎样插入罗马数字WPS里面插入罗马数字的方法(以WPS文字为例): (1)使用WPS里面

    PC计算机:AMDCPU核心细节

    PC计算机:AMDCPU核心细节,,核心提示:AthlonXP的核心型athlonxp有4种不同的核心类型,但都有个共同点:他们都使用socketa接口,他们都使用PR标称值

    分析计算机减速的原因

    分析计算机减速的原因,,核心提示:做以上九点,我相信你的爱是快的。当然,如果速度很慢,你应该考虑硬件升级。学习电脑组装,就来吧… 有很多人说