当前位置:  开发笔记 > 编程语言 > 正文

什么是期货?

如何解决《什么是期货?》经验,为你挑选了3个好方法。

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



1> Motti..:

有一个维基百科的文章有关期货交易.简而言之,它是一种使用尚未知道的值的方法.然后可以根据需要(惰性评估)计算该值,并且可选地,与主计算同时计算该值.

C++示例如下.


假设您要计算两个数字的总和.您可以拥有典型的热切实施:

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.在这种情况下,该add函数仅在尝试使用尚未计算的值时才会阻塞(也可以创建纯粹的惰性替代).

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



2> John Milliki..:

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

请参阅lazy.rb for Ruby,或Scala,future 和lazy evaluation.

它们可能可以用任何带有线程的语言实现,但在C等低级语言中显然比在高级函数式语言中更难.


http://en.wikipedia.org/wiki/Futures_and_promises#Distinction_between_futures_and_promises似乎是一个更明确的参考.(哈!维基百科!)摘要:期货开始时没有同时执行; 现在有些人将它们定义为这样做,并将原始概念重命名为Promise.

3> Robert Gould..:

为了懒惰的计算,每个人都提到了期货.然而,另一个不如宣传的用途是一般使用Futures for IO.特别是它们对于加载文件和等待网络数据很有用

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有