iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++怎么实现异步数据交换
  • 873
分享到

C++怎么实现异步数据交换

2023-07-04 15:07:55 873人浏览 独家记忆
摘要

本篇内容介绍了“c++怎么实现异步数据交换”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!异步数据交换,除了阻塞函数 send() 和 rec

本篇内容介绍了“c++怎么实现异步数据交换”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

异步数据交换,除了阻塞函数 send() 和 recv() 之外,Boost.MPI 还支持与成员函数 isend() 和 irecv() 的异步数据交换。名称以 i 开头,表示函数立即返回。

示例 47.7。使用 irecv() 异步接收数据

#include <boost/mpi.hpp>#include <boost/serialization/string.hpp>#include <string>#include <iOStream>int main(int arGC, char *argv[]){  boost::mpi::environment env{argc, argv};  boost::mpi::communicator world;  if (world.rank() == 0)  {    std::string s;    boost::mpi::request r = world.irecv(boost::mpi::any_source, 16, s);    if (r.test())      std::cout << s << '\n';    else      r.cancel();  }  else  {    std::string s = "Hello, world!";    world.send(0, 16, s);  }}

Example47.7

示例 47.7 使用阻塞函数 send() 发送字符串“Hello, world!”但是,数据是通过异步函数 irecv() 接收的。此成员函数需要与 recv() 相同的参数。不同之处在于,当 irecv() 返回时,无法保证在 s 中已收到数据。

irecv() 返回类型为 boost::mpi::request 的对象。您可以调用 test() 来检查是否已收到数据。此成员函数返回一个布尔值。您可以根据需要随时调用 test()。因为 irecv() 是一个异步成员函数,所以第一次调用可能会返回 false,而第二次调用会返回 true。这意味着异步操作在两次调用之间完成。

示例 47.7 仅调用 test() 一次。如果在 s 中接收到数据,则将变量写入标准输出流。如果没有收到数据,则使用 cancel() 取消异步操作。

如果多次运行示例 47.7,有时会出现 Hello, world!显示,有时没有输出。结果取决于是否在调用 test() 之前接收到数据。

示例 47.8。使用 wait_all() 等待多个异步操作

#include <boost/mpi.hpp>#include <boost/serialization/string.hpp>#include <string>#include <iostream>int main(int argc, char *argv[]){  boost::mpi::environment env{argc, argv};  boost::mpi::communicator world;  if (world.rank() == 0)  {    boost::mpi::request requests[2];    std::string s[2];    requests[0] = world.irecv(1, 16, s[0]);    requests[1] = world.irecv(2, 16, s[1]);    boost::mpi::wait_all(requests, requests + 2);    std::cout << s[0] << "; " << s[1] << '\n';  }  else if (world.rank() == 1)  {    std::string s = "Hello, world!";    world.send(0, 16, s);  }  else if (world.rank() == 2)  {    std::string s = "Hello, moon!";    world.send(0, 16, s);  }}

您可以多次调用 boost::mpi::request 上的 test() 来检测异步操作何时完成。但是,您也可以像示例 47.8 中那样调用阻塞函数 boost::mpi::wait_all()。 boost::mpi::wait_all() 是一个阻塞函数,但好处是可以等待多个异步操作完成。 boost::mpi::wait_all() 在它等待的所有异步操作都已完成时返回。

在示例 47.8 中,等级为 1 的进程发送“Hello, world!”以及排名 2 的过程“你好,月亮!”由于接收数据的顺序无关紧要,因此排名为 0 的进程调用 irecv()。由于程序只会在所有异步操作完成并接收到所有数据时生成输出,因此类型 boost::mpi::request 的返回值被传递给 boost::mpi::wait_all()。因为 boost::mpi::wait_all() 需要两个迭代器,所以 boost::mpi::request 类型的对象存储在一个数组中。开始和结束迭代器被传递给 boost::mpi::wait_all()

Boost.MPI 提供了额外的函数,您可以使用它们来等待异步操作的完成。 boost::mpi::wait_any() 在恰好一个异步操作完成时返回,boost::mpi::wait_some() 在至少一个异步操作完成时返回。这两个函数都返回一个 std::pair 指示哪个或哪些操作已完成。

boost::mpi::test_all()、boost::mpi::test_any() 和 boost::mpi::test_some() 通过一次调用测试多个异步操作的状态。这些函数是非阻塞的并立即返回。

“C++怎么实现异步数据交换”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: C++怎么实现异步数据交换

本文链接: https://www.lsjlt.com/news/346092.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++怎么实现异步数据交换
    本篇内容介绍了“C++怎么实现异步数据交换”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!异步数据交换,除了阻塞函数 send() 和 rec...
    99+
    2023-07-04
  • C++异步数据交换实现方法介绍
    异步数据交换,除了阻塞函数 send() 和 recv() 之外,Boost.MPI 还支持与成员函数 isend() 和 irecv() 的异步数据交换。名称以 i 开头,表示函数...
    99+
    2022-11-21
    C++异步数据交换 C++数据交换
  • JavaScript实现异步提交表单数据
    本文实例为大家分享了JavaScript实现异步提交表单数据的具体代码,供大家参考,具体内容如下 效果如下: 首先看一下HTML代码部分: <div class="co...
    99+
    2024-04-02
  • flask异步数据交换celery的用法
    这篇文章主要介绍“flask异步数据交换celery的用法”,在日常操作中,相信很多人在flask异步数据交换celery的用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”flask异步数据交换celery...
    99+
    2023-06-02
  • 通过使用Ajax函数实现异步数据交换的方法
    如何利用Ajax函数实现异步数据交互 随着互联网和Web技术的发展,前端与后端之间的数据交互变得十分重要。传统的数据交互方式,如页面刷新和表单提交,已经不能满足用户的需求。而Ajax(Asynchronous JavaScrip...
    99+
    2024-01-26
    异步 ajax 数据交互
  • 【Java】数据交换 Json 和 异步请求 Ajax
     🎄欢迎来到@边境矢梦°的csdn博文,本文主要讲解Java 中 数据交换和异步请求 Json&Ajax 的相关知识🎄 🌈我是边境矢梦°,一个正在为秋招和算法竞赛做准备的学生...
    99+
    2023-08-31
    json ajax 前端
  • C++集体数据交换如何实现
    本文小编为大家详细介绍“C++集体数据交换如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++集体数据交换如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、说明到目前为止介绍的功能共享一对一的关...
    99+
    2023-07-04
  • JavaScript如何实现异步提交表单数据
    这篇文章将为大家详细讲解有关JavaScript如何实现异步提交表单数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。本文实例为大家分享了JavaScript实现异步提交表单数据的具体代码,供大家参考,具...
    99+
    2023-06-15
  • C++集体数据交换实现示例讲解
    目录一、说明二、示例和代码一、说明 到目前为止介绍的功能共享一对一的关系:即一个进程发送和一个进程接收。链接是通过标签建立的。本节介绍在多个进程中调用相同参数但执行不同操作的函数。对...
    99+
    2022-11-21
    C++集体数据交换 C++数据交换
  • golang异步回调数据怎么实现
    在Go语言中,可以使用协程(goroutine)和通道(channel)来实现异步回调数据的功能。 首先,定义一个函数,该函数用于执...
    99+
    2023-10-27
    golang
  • react异步请求数据怎么实现
    在React中实现异步请求数据有多种方式,以下是其中几种常用的方法:1. 使用`fetch` API:`fetch`是现代浏览器提供...
    99+
    2023-09-13
    react
  • winform异步加载数据怎么实现
    在WinForm中实现异步加载数据可以使用BackgroundWorker组件或者使用Task类来实现。方法一:使用Backgrou...
    99+
    2023-10-10
    winform
  • springboot异步查询数据怎么实现
    在Spring Boot中,可以使用@Async注解来实现异步查询数据。以下是实现步骤: 在主应用程序类中添加@EnableAsy...
    99+
    2024-03-07
    springboot
  • C++中怎么异步收发数据
    这篇文章将为大家详细讲解有关C++中怎么异步收发数据,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。std::future和std::promise两者结合可...
    99+
    2024-04-02
  • C++怎么实现成对交换节点
    本篇内容主要讲解“C++怎么实现成对交换节点”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么实现成对交换节点”吧!Swap Nodes in Pairs 成对交换节点Given a&nb...
    99+
    2023-06-20
  • 如何在AJAX中使用 Servlet实现数据异步交互
    本篇文章为大家展示了如何在AJAX中使用 Servlet实现数据异步交互,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。首先,导入json所需要的6个包下载链接:JSONObjectjar_jb51....
    99+
    2023-05-31
    ajax servlet 数据异步交互
  • MySQL数据库中怎么实现异构数据同步
    本篇文章为大家展示了MySQL数据库中怎么实现异构数据同步,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在实现levelDB挂载成MySQL引擎时,发现在实际存储是...
    99+
    2024-04-02
  • Ajax中怎么利用XML实现异步提交
    这篇文章给大家介绍Ajax中怎么利用XML实现异步提交,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。第一种方法是xml方法1.首先在jsp页面的JavaScript,这段代码是通用的,...
    99+
    2024-04-02
  • WCF数据报信息交换模式怎么实现
    本篇内容介绍了“WCF数据报信息交换模式怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在所有的WCF服务中,有一些服务使用了非常典型...
    99+
    2023-06-17
  • C++中怎么实现异步操作
    C++中怎么实现异步操作,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。实现(代码)#include <iostream> #include&nb...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作