A future is an object that can retrieve a value from some provider object or function, properly synchronizing this access if in different threads.

provider比较抽象,可以是函数可以是类,是别人提供好的东西

A promise is an object that can store a value of type T to be retrieved by a future object (possibly in another thread), offering a synchronization point.

future用于访问异步操作结果

std::async可以异步执行函数,可能是放到另一个线程去执行,返回值是一个future类型

std::promise用于线程同步的工具,储存一些数据,供future获取,协程在运行得到结果后也会将结果写入promise供获取

以async为例

代码来源

#include <iostream>             // std::cout
#include <future> // std::async, std::future
#include <chrono> // std::chrono::milliseconds // a non-optimized way of checking for prime numbers:
bool is_prime(int x)
{
for (int i = 2; i < x; ++i)
if (x % i == 0)
return false;
return true;
} int main()
{
// call function asynchronously:
std::future < bool > fut = std::async(is_prime, 6666661); // do something while waiting for function to set future:
std::cout << "checking, please wait";
std::chrono::milliseconds span(100);
while (fut.wait_for(span) == std::future_status::timeout)
std::cout << '.'; bool x = fut.get(); // retrieve return value std::cout << "\n6666661 " << (x ? "is" : "is not") << " prime.\n"; return 0;
}

后面C++20里的协程我猜应该是基于此实现的,理解一下有好处

这里放一下官方promise的代码

#include <iostream>       // std::cout
#include <functional> // std::ref
#include <thread> // std::thread
#include <future> // std::promise, std::future void print_int (std::future<int>& fut) {
int x = fut.get();//获取异步执行结果
std::cout << "value: " << x << '\n';
} int main ()
{
std::promise<int> prom; // create promise std::future<int> fut = prom.get_future(); // engagement with future std::thread th1 (print_int, std::ref(fut)); // send future to new thread prom.set_value (10); // 模拟fulfill promise
// (synchronizes with getting the future)
th1.join();
return 0;
}

C++future promise的更多相关文章

  1. folly教程系列之:future/promise

         attension:本文严禁转载. 一.前言 promise/future是一个非常重要的异步编程模型,它可以让我们摆脱传统的回调陷阱,从而使用更加优雅.清晰的方式进行异步编程.c++11中 ...

  2. Future Promise 模式(netty源码9)

    netty源码死磕9  Future Promise 模式详解 1. Future/Promise 模式 1.1. ChannelFuture的由来 由于Netty中的Handler 处理都是异步IO ...

  3. clojure的delay future promise

    <Clojure编程>第4章笔记. 总的感觉,Clojure毕竟是基于JVM的在人间的工程化语言.不是纯的无状态纯函数的在神间的lisp. 作为后端语言,不可避免要处理计算中和代码执行时序 ...

  4. based on Greenlets (via Eventlet and Gevent) fork 孙子worker 比较 gevent不是异步 协程原理 占位符 placeholder (Future, Promise, Deferred) 循环引擎 greenlet 没有显式调度的微线程,换言之 协程

    gevent GitHub - gevent/gevent: Coroutine-based concurrency library for Python https://github.com/gev ...

  5. 使用 Vert.X Future/Promise 编写异步代码

    Future 和 Promise 是 Vert.X 4.0中的重要角色,贯穿了整个 Vert.X 框架.掌握 Future/Promise 的用法,是用好 Vert.X.编写高质量异步代码的基础.本文 ...

  6. The promises and challenges of std::async task-based parallelism in C++11 C++11 std::async/future/promise

    转载 http://eli.thegreenplace.net/2016/the-promises-and-challenges-of-stdasync-task-based-parallelism- ...

  7. Future与Promise

    https://code.csdn.NET/DOC_Scala/chinese_scala_offical_document/file/Futures-and-Promises-cn.md#ancho ...

  8. 并发编程(三)Promise, Future 和 Callback

    并发编程(三)Promise, Future 和 Callback 异步操作的有两个经典接口:Future 和 Promise,其中的 Future 表示一个可能还没有实际完成的异步任务的结果,针对这 ...

  9. Netty 中的异步编程 Future 和 Promise

    Netty 中大量 I/O 操作都是异步执行,本篇博文来聊聊 Netty 中的异步编程. Java Future 提供的异步模型 JDK 5 引入了 Future 模式.Future 接口是 Java ...

  10. 带callback的future实现

    jdk暂时不支持,所以只有自己实现带callback的future. 完成后callback的 final TaskPromise promise = new DefaultTaskPromise() ...

随机推荐

  1. 2373. 矩阵中的局部最大值 (Easy)

    问题描述 2373. 矩阵中的局部最大值 (Easy) 给你一个大小为 n x n 的整数矩阵 grid . 生成一个大小为 (n - 2) x (n - 2) 的整数矩阵 maxLocal ,并满足 ...

  2. python socket 开发

    socket 服务端开发 #socket 服务端开发 import socket # 创建socket 对象 socket_server = socket.socket() # 绑定ip 地址和端口 ...

  3. linux 多级时间轮应用场景

    参考链接: https://www.163.com/dy/article/GMGUO9UV05421U51.html

  4. Neo4j删除节点和关系、彻底删除节点标签名(转载备忘)

    https://www.jianshu.com/p/59bd829de0de 总结提前: [1]先删关系,再删节点 [2]当记不得关系名时,type(r)可以查到关系名 [3]彻底删除节点标签名,需要 ...

  5. Delete `␍` prettier/prettier Vue 可悬浮按钮

    Delete `␍` prettier/prettier 代码格式化不一致,换行符冲突.UNIX/Linux 使用的是 0x0A(LF), DOS/Windows 一直使用 0x0D0A(CRLF) ...

  6. Cannot read properties of null (reading ‘insertBefore‘)

    一.报错现象 vue3 + element plus 项目,本地启动时,页面进行所有操作都正常:部署到test环境后,数据驱动DOM变化的操作会导致如下报错. 二.可能原因及解决方案 经过分析出现报错 ...

  7. nfs-client-provisioner 利用NFS动态提供Kubernetes后端存储卷

    nfs-client-provisioner 利用NFS动态提供Kubernetes后端存储卷     一.选一个节点安装nfsserver 服务   yum install nfs-common n ...

  8. 音乐下载器,音乐解析软件,全网音乐免费下载,mp3格式音乐下载,flac格式音乐下载,无损音质音乐下载器,你想听的都搜的到~

    在这个音乐版权被三分天下的时代,想必大家也都会有这种的困扰,喜欢的音乐很多,刚好这些音乐的版权还分散在三大主流音乐厂商的手里. 这样的话,想要听或者下载自己喜欢的音乐可能要开多个会员,而且下载的音乐单 ...

  9. react框架-知识点(ref,, setState)

    react的思想:无必要勿增实体 1. ref 使用 myRef = React.createRef() <input ref={this.myRef}></input> 2. ...

  10. php functions 生成唯一码

    <?php /** * 微擎密码生成 * */ function we7password($passwordinput, $salt, $authkey) { $passwordinput = ...