AUTOSAR_EXP_ARAComAPI的5章笔记(11)
5.4.5 轮询和事件驱动处理模式
接下来,我们探讨服务提供方同时支持事件驱动和轮询行为的情况。从服务实例(此处指骨架子类实例)的角度来看,服务消费者的请求(包括服务方法或字段的 getter/setter 调用)可能在任意时间点到来。
在纯事件驱动的设置中,通信管理会生成相应的调用事件,并将这些事件转换为对服务实现提供的服务方法的具体方法调用。
这种设置的后果显而易见:
- 对服务方法调用的响应通常会很快,因为延迟仅受一般机器负载和内在 IPC 机制延迟的限制。
- 包含服务实例的操作系统进程的上下文切换率可能会很高且不确定,从而降低整体吞吐量。
正如您所见,服务提供方的事件驱动处理模式既有优点,也有缺点。然而,我们确实通过 ara::com 支持这种处理模式。我们支持的另一种极端情况是纯轮询风格的方法。在这里,服务提供方的应用程序开发人员明确调用 ara::com 提供的 API 来明确处理一个调用事件。
通过这种方式,我们再次支持典型的 RT(实时操作系统)应用程序开发人员。他们的应用程序通常由于低抖动周期性警报而被激活。当应用程序处于活动状态时,它以非阻塞方式检查事件队列,并明确决定愿意处理自上次激活时间以来积累的哪些事件。再次强调:应用程序进程的上下文切换 / 激活仅由特定的(RT)定时器接受,异步通信事件不应导致应用程序进程激活。
那么,ara::com 如何允许应用程序开发人员区分这些处理模式呢?骨架实例的行为由其构造函数的第二个参数控制,该参数的类型为 ara::com::MethodCallProcessingMode。
/*** 服务实现方(骨架)的请求处理模式。* * \note 平台供应商应完全按照此方式提供。*/
enum class MethodCallProcessingMode { kPoll, kEvent, kEventSingleThread };
这意味着处理模式是为整个服务实例设置的(即其所有提供的方法都将受到影响),并且在骨架实例的整个生命周期内保持固定。构造函数中的默认值设置为 kEvent,下面将对此进行解释。
5.4.5.1 轮询模式
如果将其设置为 kPoll,ara::com 实现将不会异步调用任何提供的服务方法!如果您想要处理下一个(假设后台有一个队列,用于存储传入的服务方法调用)挂起的服务调用,则必须在服务实例上调用以下方法:
/*** 从通信管理中获取下一个调用并执行它。* * 仅在轮询模式下可用。*/
ara::core::Future<bool> ProcessNextMethodCall();
我们使用 ara::core::Future 的机制来返回一个在未来完成的结果。这个返回的 ara::core::Future 有什么作用呢?它允许您在 “下一个请求” 被处理时得到通知。这有助于将服务方法调用一个接一个地连接起来,可能会非常有帮助。一个典型的 RT 应用程序的简单用例可能是:
- RT 应用程序被调度。
- 它调用
ProcessNextMethodCall并使用ara::core::Future::then()注册一个回调。 - 在与未完成请求相对应的中间件调用的服务方法完成后,回调被调用。
- 在回调中,RT 应用程序决定是否有足够的时间来处理后续的服务方法。如果是这样,它会调用另一个
ProcessNextMethodCall。
当然,这个简单的例子假设 RT 应用程序知道其服务方法的最坏情况运行时间(及其总体时间片),但这并非不可能!如果队列中确实存在未完成的请求并且已被分派,则通信管理会将返回的 ara::core::Future 的 bool 值设置为 true,否则将其设置为 false。
这对于应用程序开发人员来说是一个比较舒适的指示器,即使请求队列为空,也不会重复调用 ProcessNextMethodCall。因此,在前一个调用返回的 ara::core::Future 的结果设置为 false 后直接调用 ProcessNextMethodCall 很可能不会执行任何操作(除非在这个最小的时间框架内偶然有一个新的请求进来)。
请注意,对于基于典型操作系统的 AP 产品,轮询模式会产生影响。除了排除由通信管理事件(传入的服务方法调用)导致的进程(包含服务实现)的上下文切换外,队列的位置也存在限制,它必须收集服务方法调用请求,直到轮询服务实现消耗它们为止。
队列必须在服务提供应用程序的地址空间之外实现,或者必须位于共享内存之类的位置,以便发送方能够直接写入队列。与共享内存解决方案相比,轮询服务提供程序对下面队列位置的访问可能会带来更高的成本 / 延迟。将队列放置在服务提供程序地址空间之外的典型解决方案是:
- 内核空间:如果绑定实现使用套接字或管道机制,则写入调用的目标内核缓冲区类似于队列。在典型的操作系统中,调整 / 配置这些缓冲区的最大大小可能意味着需要重新编译内核。
- 不同绑定 / 通信管理守护应用程序的用户地址空间:在用户空间内分配的队列的缓冲区空间分配通常可以更动态 / 灵活地完成。
5.4.5.2 事件驱动模式
如果将处理模式设置为 kEvent 或 kEventSingleThread,当服务消费者的服务调用到来时,ara::com 实现将异步将事件分派给服务方法实现。
与 kPoll 模式相反,在这里服务消费者隐式地控制 / 触发服务提供程序进程的激活及其方法调用!
那么 kEvent 和 kEventSingleThread 之间的区别是什么呢?kEvent 意味着 ara::com 实现可以同时调用服务方法实现。
这意味着对于我们的示例:如果 —— 在同一时间点 —— 来自不同服务消费者的一个对方法 Calibrate 的调用和两个对方法 Adjust 的调用到达,ara::com 实现允许从其内部线程池中获取三个线程,并同时为这两个服务方法执行这三个调用。
相反,kEventSingleThread 模式确保在服务实例上,ara::com 实现每次只调用一个服务方法。
这意味着 ara::com 实现必须为同一服务实例的传入服务方法调用事件排队,并一个接一个地分派它们。
为什么我们提供这两个变体呢?从功能的角度来看,只有 kEvent 就足够了!对于某些由于共享数据 / 一致性需求而无法同时运行的服务方法的服务实现,它可以简单地自己进行同步(例如通过 std::mutex)!
原因是 “效率”。如果您有一个服务实例实现,它具有广泛的同步需求,即无论如何几乎会同步所有服务方法调用,那么如果通信管理从其线程池资源中 “花费”N 个线程,而这些线程在直接获得硬同步后,将 N - 1 个线程发送到睡眠状态,这将是一种完全的资源浪费。
相关文章:
AUTOSAR_EXP_ARAComAPI的5章笔记(11)
5.4.5 轮询和事件驱动处理模式 接下来,我们探讨服务提供方同时支持事件驱动和轮询行为的情况。从服务实例(此处指骨架子类实例)的角度来看,服务消费者的请求(包括服务方法或字段的 getter/setter 调用)可能…...
面经3——中和农信
今天参加了中和农信的面试,先进行60分钟的笔试,笔试完参加面试,面试官有两个人,面试了大概四十多分钟,因为没有亮点的项目,简历看起来十分单薄。现在来复盘一下。 笔试 事务ACID、事务隔离级别、乐观锁的…...
线程1(重点知识)
线程 1.线程的概念: 线程是进程中的⼀个执行单元,负责当前进程中程序的执行,⼀个进程中至少有⼀个线程 ⼀个进程中是可以有多个线程 多个线程共享同一个进程的资源,每个线程参与操作系统的统一调度 可以简单理解: 进程 进程资源…...
Python中requests模块(爬虫)基本使用
Python的requests模块是一个非常流行的HTTP库,用于发送HTTP/1.1请求。 一、模块导入 1、requests模块的下载: 使用包管理器下载,在cmd窗口,或者在项目的虚拟环境目录下: pip3 install -i https://pypi.tuna.tsingh…...
快递上门取件API接口代码
官网:快递鸟 API列表 功能功能描述应用场景超区校验接口校验该地区是否支持上门取件,以及3天内可支持的上门取件时间段。场景一:寄件人老七,选择从深圳向北极村寄快递,通过超区检验接口,提前了解到深圳寄…...
sklearn特征选取之RFE
sklearn.feature_selection.RFE 是一种递归特征消除(Recursive Feature Elimination, RFE)方法,用于通过反复训练模型和消除不重要的特征,逐步减少特征数量,最终选择最重要的特征。它是一种用于特征选择的算法…...
vue.js 展示树状结构数据,动态生成 HTML 内容
展示树状结构数据: 从 jsonData 读取树状结构的 JSON 数据,将其解析并生成 HTML 列表来展示。树状结构数据根据 id 和 label 属性组织,节点可以包含子节点 children。 展示评级信息: 从预定义的表单字段 form 中读取 arRateFlag 和…...
科技赋能安全,财谷通助力抖音小店腾飞!
在数字经济的浪潮中,短视频与直播带货已成为新时代的商业风口,抖音小店作为这一领域的佼佼者,正引领着无数小微商家踏上创业与转型的快车道。然而,随着市场的日益繁荣,如何有效管理店铺、提升运营效率、保障交易安全成…...
Redis安装教程
Redis安装详细教程 📖1.单机安装Redis✅安装Redis依赖✅上传安装包并解压✅启动🧊默认启动🧊指定配置启动🧊开机自启 📖2.Redis客户端✅Redis命令行客户端✅图形化桌面客户端🧊安装🧊建立连接 大…...
Idea集成docker实现镜像打包一键部署
1.Docker开启远程访问 #修改该Docker服务文件 vi /lib/systemd/system/docker.service#修改ExecStart这行 ExecStart/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock将文件内的 ExecStart注释。 新增如上行。 ExecStart/usr/bin/dockerd -H fd:/…...
spring 注解 - @NotNull - 确保字段或参数值不为 null
NotNull 是 Bean Validation API(JSR 303/JSR 349)中的一个注解,用于确保一个字段或参数值不为 null。这个注解可以用于 Java 类的字段、方法的参数或者方法的返回值上,以确保在运行时这些值不为空。 使用场景 字段验证…...
408算法题leetcode--第13天
61. 旋转链表 61. 旋转链表思路:注释时间:O(n);空间:O(1) /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x…...
【MySQL】表的基本查询
目录 🌈前言🌈 📁 创建Creator 📂 插入数据 📂 插入否则更新 📂 替换 📁 读取Retrieve 📂 select列 📂 where条件 📂 结果排序 📂 筛选分页结果…...
李宏毅2023机器学习HW15-Few-shot Classification
文章目录 LinkTask: Few-shot ClassificationBaselineSimple—transfer learningMedium — FO-MAMLStrong — MAML Link Kaggle Task: Few-shot Classification The Omniglot dataset background set: 30 alphabetsevaluation set: 20 alphabetsProblem setup: 5-way 1-sho…...
API安全推荐厂商瑞数信息入选IDC《中国数据安全技术发展路线图》
近日,全球领先的IT研究与咨询公司IDC发布报告《IDC TechScape:中国数据安全技术发展路线图,2024》。瑞数信息凭借其卓越的技术实力和广泛的行业应用,被IDC评选为“增量型”技术曲线API安全的推荐厂商。 IDC指出,数据安…...
1.5 计算机网络的性能指标
参考:📕深入浅出计算机网络 目录 速率 带宽 吞吐量 时延 时延带宽积 往返时间 利用率 丢包率 速率 速率是指数据的传送速率(即每秒传送多少个比特),也称为数据率(Data Rate)或比特率&am…...
【已解决】IDEA鼠标光标与黑块切换问题,亲测有效
前言 前两天我妹妹说她室友的idea光标变成黑块状了,解决不了跑来问我,这是刚入门开发者经常遇到的问题,这篇文章介绍一下这两种方式,方便刚入门的小伙伴儿们更清楚地了解idea,使用idea。 希望这篇文章能够帮助到遇到…...
记一次sql查询优化
记一次sql查询优化 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 今天测试环境发现一个问题,就是测试同事在测试的时候,发现cpu一直居高不下,然…...
str函数的模拟(包括strn函数的模拟)
首先先说这些函数引用的头文件是<string.h> 1.strlen函数 int my_strlen(char* s1) { //这里只用最难的方法 if (*s1) { return my_strlen(s1 1) 1; } else return 0; } 这里使用了递归的方法(不创建新的变量࿰…...
畅阅读微信小程序
畅阅读微信小程序 weixin051畅阅读微信小程序ssm 摘 要 随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用j…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
