[C++从零实现Json-Rpc框架]第三弹——C++11异步操作

06-01 1333阅读

[C++从零实现Json-Rpc框架]第三弹——C++11异步操作

[C++从零实现Json-Rpc框架]第三弹——C++11异步操作

一、前言

        在本篇博文中,博主将为大家带来【C++从零实现Json-Rpc框架】的第三弹,即C++11中的异步操作,希望大家能够从中有所收获

二、正文

1.std::future 介绍

std::future是C++11标准库中的⼀个模板类,它表⽰⼀个异步操作的结果。当我们在多线程编程中使⽤异步任务时,std::future可以帮助我们在需要的时候获取任务的执⾏结果。std::future的⼀个重要特性是能够阻塞当前线程,直到异步操作完成,从⽽确保我们在获取结果时不会遇到未完成的操作。

注:std::futrue 本质上不是一个异步任务,而是一个辅助我们获取异步任务结果的东西

2. 应用场景

• 异步任务:当我们需要在后台执⾏⼀些耗时操作时,如⽹络请求或计算密集型任务等,std::future 可以⽤来表⽰这些异步任务的结果。通过将任务与主线程分离,我们可以实现任务的并⾏处理,从而提⾼程序的执⾏效率

• 并发控制:在多线程编程中,我们可能需要等待某些任务完成后才能继续执⾏其他操作。通过使⽤ std::future,我们可以实现线程之间的同步,确保任务完成后再获取结果并继续执⾏后续操作

 • 结果获取:std::future提供了⼀种安全的⽅式来获取异步任务的结果。我们可以使⽤ std::future::get()函数来获取任务的结果,此函数会阻塞当前线程,直到异步操作完成。这样,在调⽤get()函数时,我们可以确保已经获取到了所需的结果

3. 用法介绍与示例

std::future并不能单独使用,需要搭配一些能够执行异步任务的模板类或者函数一起使用

异步任务搭配使用:

        ●std::async函数模版:异步执行一个函数,返回一个future对象用于获取函数结果

        ●std::packaged_task类模版:为一个函数生成一个异步任务对象(可调用对象),用于在其他线程中执行

        ●std::promi类模板:示例的对象可以返回一个对象,在其他线程中向promise对象设置数据,其他线程的关联future就可以获取数据

 ● 使用std::async关联异步任务

std::async是⼀种将任务与std::future关联的简单⽅法。它创建并运⾏⼀个异步任务,并返回⼀个与该 任务结果关联的std::future对象。默认情况下,std::async是否启动⼀个新线程,或者在等待future 时,任务是否同步运⾏都取决于你给的参数。这个参数为std::launch类型:

★ std::launch::deferred 表明该函数会被延迟调⽤,直到在future上调⽤get()或者wait()才会开始 执⾏任务

★ std::launch::async 表明函数会在⾃⼰创建的线程上运⾏ 

注: std::launch::deferred | std::launch::async内部通过系统等条件⾃动选择策略,也就是在调用async函数的时候可以通过参数的传递来选择任务执行的方式是同步还是异步。

#include 
#include 
#include 
int Add(int num1, int num2){
    std::cout
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码