Skeleton角度的轮询和事件驱动处理模式

一、服务提供方的处理模式概述

文档主要讨论了服务提供方在ara::com框架下的事件驱动和轮询两种处理模式,以及它们的特点和应用场景。

二、事件驱动处理模式

  1. 工作原理

    • 在纯事件驱动的设置中,通信管理会生成相应的调用事件,并将这些事件转换为对服务实现提供的服务方法的具体方法调用。
    • 服务消费者的服务调用到来时,ara::com实现将异步将事件分派给服务方法实现。
  2. 优缺点

    • 优点:对服务方法调用的一般反应可能会很快,因为延迟仅受一般机器负载和内在 IPC 机制延迟的限制。
    • 缺点:包含服务实例的操作系统进程的上下文切换率可能会很高且不确定,从而降低整体吞吐量。

三、轮询处理模式

  1. 设置与调用方法

    • 如果将处理模式设置为kPollara::com实现将不会异步调用任何提供的服务方法。
    • 要处理下一个挂起的服务调用,必须在服务实例上调用ara::core::Future<bool> ProcessNextMethodCall();方法。
  2. 返回值作用

    • 返回的ara::core::Future<bool>允许在 “下一个请求” 被处理时得到通知,有助于将服务方法调用一个接一个地连接起来。
    • 如果队列中存在未完成的请求并且已被分派,返回的bool值为true,否则为false
  3. 对 AP 产品的影响及队列位置

    • 对于基于典型操作系统的 AP 产品,轮询模式会排除由通信管理事件导致的进程上下文切换。
    • 队列必须在服务提供应用程序的地址空间之外实现,或者位于共享内存之类的位置,以便发送方能够直接写入队列。
    • 典型的队列位置解决方案包括内核空间(如果绑定实现使用套接字或管道机制,目标内核缓冲区类似队列,但调整缓冲区大小可能需要重新编译内核)和不同绑定 / 通信管理守护应用程序的用户地址空间(在用户空间内分配队列的缓冲区空间更灵活)。

四、代码示例

  • 服务实现方的请求处理模式枚举:
/*** 服务实现方(骨架)的请求处理模式。* * \note 平台供应商应完全按照此方式提供。*/
enum class MethodCallProcessingMode { kPoll, kEvent, kEventSingleThread };
  • 轮询模式下获取下一个调用并执行的方法:
/*** 从通信管理中获取下一个调用并执行它。* * 仅在轮询模式下可用。*/
ara::core::Future<bool> ProcessNextMethodCall();

五、kEventkEventSingleThread的区别

  1. kEvent:意味着ara::com实现可以同时调用服务方法实现。例如,来自不同服务消费者的多个调用可以同时被执行,ara::com实现允许从其内部线程池中获取多个线程同时为多个服务方法执行调用。

  2. kEventSingleThread:确保在服务实例上,ara::com实现每次只调用一个服务方法。ara::com实现必须为同一服务实例的传入服务方法调用事件排队,并一个接一个地分派它们。

六、提供两个变体的原因

从功能角度看,只有kEvent似乎就足够了,但对于某些由于共享数据 / 一致性需求而无法同时运行服务方法的服务实现,可以简单地自己进行同步(如通过std::mutex)。提供两个变体的原因是 “效率”。如果服务实例实现具有广泛的同步需求,几乎会同步所有服务方法调用,那么如果通信管理从其线程池资源中 “花费”N个线程,而这些线程在直接获得硬同步后,将N - 1个线程发送到睡眠状态,这将是一种资源浪费。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/148237.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

MatrixOne助力一道创新打造高性能智能制造AIOT系统

客户简介 深圳一道创新&#xff08;ETAO Innovation&#xff09;成立于2012年&#xff0c;是一家创新型软件及信息技术服务商&#xff0c;致力于制造戏份行业—电子制造业的数字转型服务&#xff0c;构建万物互联的智能工程。一道创新致力于把先进的软件系统、数字平台、人工智…

QT中添加资源文件

什么是资源文件 项目中经常需要添加图片、‌音频、‌视频、翻译文件等文件&#xff0c;在QT中&#xff0c;这些文件会放在 .qrc 文件中来被使用。 .qrc 文件是一个XML格式的资源集合描述文件&#xff0c;是Qt中用于定义和管理资源的关键文件 如何使用 创建资源文件 在你的Qt项…

C++之STL—string容器

本质&#xff1a;类 class 封装了很多方法&#xff1a;查找find&#xff0c;拷贝copy&#xff0c;删除delete 替换replace&#xff0c;插入insert 构造函数 赋值操作 assign&#xff1a; 字符串拼接 &#xff0b; append&#xff1a; string查找和替换 没查找到&#xff0c;po…

石头剪刀布手势识别系统源码分享

石头剪刀布手势识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comput…

Qt系统相关——QThread

文章目录 QThread的API使用示例客户端多线程应用场景互斥锁QMutexQMutexLockerQReadWriteLocker、QReadLocker、QWriteLocker 条件变量和信号量 QThread的API Qt中的多线程和Linux中的线程&#xff0c;本质上是一个东西 Linux线程概念 Linux多线程——线程控制 Linux多线程——…

[干货] [非基础警告] Unity 发布-订阅模式下的事件中心设计

本文师承于唐老师&#xff0c;但是修改了一些代码&#xff0c;采用更加方便理解的方式设计 1.什么是事件中心 2.可以比喻成冒险者工会的任务板子 任务板子上面有发布任务和任务完成两种基础情况 2.1 发布任务 来个冒险者发布一个任务&#xff0c;就执行Pulishtask方法 这…

记一次 RabbitMQ 消费者莫名消失问题的排查

问题回顾 某天下午&#xff0c;生产监控告警&#xff1a;消息积压&#xff0c;队列 xxx 消息数超过 100&#xff1b;我第一时间想到的是应用服务是不是停了&#xff0c;但应用服务存活监控又没有告警&#xff0c;但我还是找值班运维同事帮忙确认了下&#xff0c;确认结果是服务…

GitHub上图像超分开源项目推荐【持续更新】

RAISR 介绍&#xff1a;RAISR&#xff08;Rapid and Accurate Image Super-Resolution&#xff09;是一种由Google开发的图像超分辨率技术&#xff0c;它利用机器学习算法来提高低分辨率图像的质量&#xff0c;使其看起来更加清晰和细致。这项技术可以在移动设备上实时运行&am…

uni-app快速入门

目录 一、什么是 uni-app二、快速创建 uni-app 项目1.创建 uni-app2.运行 uni-app 三、uni-app 相对传统 H5 的变化1.网络模型的变化2.文件类型变化3.文件内代码架构的变化4.外部文件引用方式变化5.组件/标签的变化6.js的变化&#xff08;1&#xff09;运行环境从浏览器变成v8引…

java项目之基于springboot框架开发的景区民宿预约系统的设计与实现(源码+文档)

项目简介 基于springboot框架开发的景区民宿预约系统的设计与实现的主要使用者分为&#xff1a; 管理员的功能有&#xff1a;用户信息的查询管理&#xff0c;可以删除用户信息、修改用户信息、新增用户信息&#xff0c;根据公告信息进行新增、修改、查询操作等等。。 &#x1…

最新版Visual Studio安装教程(超详细,新手必看)

一、官网下载 这里奉上Visual Studio官方下载地址&#xff1a; https://visualstudio.microsoft.com/zh-hans/downloads/https://visualstudio.microsoft.com/zh-hans/downloads/ 对于我们学习来说&#xff0c;下载第一个社区免费版即可&#xff0c;点击下载。 下载完成以后是…

Conda虚拟环境配置常见问题记录

搞深度学习的&#xff0c;总有被虚拟环境搞得头大的时候&#xff0c;特别是涉及到CUDA&#xff0c;Torch &#xff0c;Torchvision 版本适配的问题。这两天因为在原来的环境中装了几个包&#xff0c;导致原来的环境崩了&#xff0c;搞了一天的时间又重新配了环境&#xff0c;中…

18 基于51单片机的心率体温监测报警系统(包括程序、仿真、原理图、流程图)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机 ds18B20读取温度&#xff0c; 设置初始心率65 设置温度阈值38 心率阈值60 100 如果超过阈值&#xff0c;蜂鸣器报警&#xff0c;led灯亮 二、硬件资源 基于KEIL5编写C代码&#xf…

BOE(京东方)重磅亮相世界制造业大会 科技创新引领现代化产业体系建设新未来

9月20日-23日&#xff0c;备受瞩目的2024世界制造业大会在合肥盛大召开&#xff0c;汇聚全球行业领袖、专家学者、知名企业&#xff0c;共同探讨现代化产业体系建设的新技术、新趋势、新机遇。作为积极推动实体经济与数字经济融合发展的产业领军企业&#xff0c;BOE&#xff08…

文件(打开关闭读写) C语言

一、文件 二、打开文件 关闭文件 FILE *fopen(const char *path, const char *mode); 功能: 打开文件&#xff0c;获得对应的流指针数&#xff1a; "r" 只读方式&#xff0c;文件必须存在&#xff0c;不存在则报错 "r" 读写方式&…

spring boot文件上传之x-file-storage

spring boot文件上传之x-file-storage 今天看到一个文件上传的开源组件x-file-storage&#xff0c;官方地址如下&#xff1a; https://x-file-storage.xuyanwu.cn/#/ 该组件官网是这样介绍的&#xff0c;如下&#xff1a; 一行代码将文件存储到本地、FTP、SFTP、WebDAV、阿…

kettle从入门到精通 第八十六课 ETL之kettle kettle调用https接口忽略SSL校验

1、在使用kettle调用接口的时候不可避免要调用http或者https接口&#xff0c;调用http接口kettle可以正常工作&#xff0c;但是遇到https接口的时候kettle就会提示证书有误&#xff0c;无法正常调用接口&#xff0c;今天咱们一起通过自研插件的方式来解决这个问题。自研插件需要…

简单的云存储靶场

搭建靶场 我这里使用tx云&#xff0c;请自行搭建 https://shuihui2211-1329809954.cos.ap-nanjing.myqcloud.com 复现 私有读写 访问权限为私有读写时&#xff0c;我们访问url则会出现如下提示 目录遍历 漏洞成因 将policy权限设置为所有操作时 复现 我这里上传了一…

YOLO V10简单使用

一.环境安装 1、下载官方源码 官方GitHub地址&#xff1a;https://github.com/THU-MIG/yolov10 点击跳转 2. 配置conda环境 在conda创建python3.9环境 conda create -n yolov10 python3.9激活切换到创建的python3.9环境 conda activate yolov103. 安装YOLOv10依赖 切换…

Algo-Lab 2 Stack Queue ADT

Lab 2: Stack & Queue ADT Part 1 ​ 这里只说一下最小栈的思路&#xff0c;我们可以在定义一个栈&#xff0c;来同步存储当前情况下的占的最小值。最小栈第一时间的想法可能是设定一个变量&#xff0c;每次push进来栈中的元素进行对比&#xff0c;保持最小值&#xff0c;…