首页 > 其他分享 >ananas future分析

ananas future分析

时间:2023-09-03 13:31:55浏览次数:44  
标签:分析 std function ananas State future Promise Progress

在《异步编程:promise and future》一文中对promise & future异步编程进行了介绍,文中对“回调地狱”也进行简单说明,本文对其中一种开源方案源码进行分析;

uml类图

ananas future分析_cpp

Promise和Future对象共享一个State状态,其数据结构为:

enum class Progress {
    None,
    Timeout,
    Done,
    Retrieved,
};

using TimeoutCallback = std::function<void ()>;

template <typename T>
struct State {
    static_assert(std::is_same<T, void>::value ||
                  std::is_copy_constructible<T>() ||
                  std::is_move_constructible<T>(),
                  "must be copyable or movable or void");

    State() :
        progress_(Progress::None),
        retrieved_ {false} {
    }

    std::mutex thenLock_;

    using ValueType = typename TryWrapper<T>::Type;
    ValueType value_;                          // 当前处理结果
    std::function<void (ValueType&& )> then_;  // 下一级处理
    Progress progress_;                        // 当前处理状态

    std::function<void (TimeoutCallback&& )> onTimeout_;
    std::atomic<bool> retrieved_;

    bool IsRoot() const {
        return !onTimeout_;
    }
};

根据以下用例分析实现:

ananas::ThreadPool tpool;

    Future<int> ft(tpool.Execute(ThreadFunc<int>));

    ft.Then([](int v) {
        std::cout << "1.Then got int value " << v
                  << " and return float 1.0f." << std::endl;
        return 1.0f;
    })  
    .Then([](float f) {
        std::cout << "2.Then got float value " << f
                  << " and return 2." << std::endl;
        return 2;
    })

Then活动图

ananas future分析_cpp_02

Promise和Future共享一个State状态,State中存有下一级的回调函数,函数中执行下一级的SetVaule,Promise的SetVaule为触发下一级执行的trigger。

此外还有WhenAny、WhenAll等接口,了解Then的实现后,相信其他实现不难理解;

ananas future分析_cpp_03

参考资料:

【1】https://github.com/loveyacper/ananas

标签:分析,std,function,ananas,State,future,Promise,Progress
From: https://blog.51cto.com/u_13137973/7339996

相关文章

  • citect2018R2过程分析器趋势笔标签加上工程单位显示
    这两天在家里学习练习了CITECT2018R2上过程分析器趋势笔标签上显示出工程单位,在新浪博客记录过一次,在这里也记录一下。建立一个unity程序,有两个变量,分别是流量和浓度,建立的过程不在这里记录。新建citect2018R2项目,配置IO设备指向unity模拟器,建立变量和趋势变量,过程也不在这里记录......
  • Matlab 数值分析计算汇集
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • 【性能测试】JVM自带内存分析工具详解
    一、Jstat使用(重点)Jstat命令是jvm调优非常重要,且非常有效的命令。具体用法如下:1.垃圾回收统计jstat-gcjstat-gc进程id这个命令非常常用,在线上有问题的时候,可以通过这个命令来分析问题。下面我们来测试一下,启动一个项目,然后在终端驶入jstat-gc进程id,得到如下结果上面......
  • 多元线性回归分析
    回归分析的任务就是:通过研究自变量X和因变量Y的相关关系,尝试去解释Y的形成机制,进而达到通过X去预测Y的目的。常见的回归有5类:线性回归0-1回归定序回归计数回归生存回归其划分的依据是因变量Y的类型相关性首先要区分相关性不等于因果性,比如研究表明雪糕销量越高游泳死......
  • Lnton羚通智能分析算法基于智能算法的石油化领域生产作业流程合规检测系统
    石油化工领域的生产作业流程合规检测对于保障工厂安全运行至关重要。本文介绍了一种基于智能算法的生产作业流程合规检测方法,在传感器数据分析和模式识别方面应用了机器学习技术,提高了检测效果和准确性。通过该方法,可以及时发现和纠正不合规操作,最大限度地降低事故风险。石油化工领......
  • Lnton 羚通智能分析算法工服智能监测预警算法
    工服智能监测预警系统通过yolov8网络模型算法,工服智能监测预警算法对现场人员未按要求穿戴工服工装则输出报警信息,通知后台人员及时处理。Yolo算法采用一个单独的CNN模型实现end-to-end的目标检测,核心思想就是利用整张图作为网络的输入,直接在输出层回归boundingbox(边界框)......
  • Lnton羚通智能分析算法检测人群异常聚集检测告警算法的流程代码
    Lnton羚通视频智能分析算法中人群异常聚集检测报警系统是基于yolov8图像识别和数据分析技术,人群异常聚集检测告警算法通过在关键区域布设监控摄像头,实时监测人员的密集程度和行为动态,分析和判断人群密集程度是否超过预设阈值,一旦发现异常聚集,将自动发出信号,并提示相关人员采取相应......
  • Lnton羚通智能分析算法AI智慧工地视频分析系统代码
    AI智慧工地视频分析系统通过yolov8网络模型视频智能分析技术,AI智慧工地视频分析算法模型对画面中物的不安全状态以及现场施工作业人员的不合规行为及穿戴进行全天候不间断实时分析,发现有人不合规行为及违规穿戴抽烟打电话等立即自动抓拍存档告警。在架构方面,E-ELAN只改变了计算块......
  • 【从互联网商业思维的角度分析商业模式在国内各大互联网产品的运用】
    随着互联网技术的不断进步,互联网商业模式也在不断变化,各个互联网企业都在不断尝试各种商业模式,以满足不同消费者群体的需求,提高企业营销效益,下面我们将从互联网商业思维的角度,分析一下商业模式在国内各大互联网产品的运用。一、电商模式电商模式是指在互联网上建立电子商务平台,通......
  • Lnton 羚通视频分析算法平台【OpenCV-Python】教程: Depth Map from Stereo Images 立
    立体图像的深度图(DepthMap)是表示图像中每个像素点距离相机的深度或距离信息的二维灰度图。它提供了场景中物体的三维结构和距离信息,对于三维重建、增强现实、虚拟现实等应用具有重要意义。深度图可以通过以下方式获取:1.双目视觉方法:使用两个相机(左右摄像机)同时拍摄同一场景,通过计......