当前位置: 首页 > news >正文

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 轮询模式

如果将其设置为 kPollara::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 轮询和事件驱动处理模式 接下来&#xff0c;我们探讨服务提供方同时支持事件驱动和轮询行为的情况。从服务实例&#xff08;此处指骨架子类实例&#xff09;的角度来看&#xff0c;服务消费者的请求&#xff08;包括服务方法或字段的 getter/setter 调用&#xff09;可能…...

面经3——中和农信

今天参加了中和农信的面试&#xff0c;先进行60分钟的笔试&#xff0c;笔试完参加面试&#xff0c;面试官有两个人&#xff0c;面试了大概四十多分钟&#xff0c;因为没有亮点的项目&#xff0c;简历看起来十分单薄。现在来复盘一下。 笔试 事务ACID、事务隔离级别、乐观锁的…...

线程1(重点知识)

线程 1.线程的概念: 线程是进程中的⼀个执行单元&#xff0c;负责当前进程中程序的执行&#xff0c;⼀个进程中至少有⼀个线程 ⼀个进程中是可以有多个线程 多个线程共享同一个进程的资源&#xff0c;每个线程参与操作系统的统一调度 可以简单理解&#xff1a; 进程 进程资源…...

Python中requests模块(爬虫)基本使用

Python的requests模块是一个非常流行的HTTP库&#xff0c;用于发送HTTP/1.1请求。 一、模块导入 1、requests模块的下载&#xff1a; 使用包管理器下载&#xff0c;在cmd窗口&#xff0c;或者在项目的虚拟环境目录下&#xff1a; pip3 install -i https://pypi.tuna.tsingh…...

快递上门取件API接口代码

官网&#xff1a;快递鸟 API列表 功能功能描述应用场景超区校验接口校验该地区是否支持上门取件&#xff0c;以及3天内可支持的上门取件时间段。场景一&#xff1a;寄件人老七&#xff0c;选择从深圳向北极村寄快递&#xff0c;通过超区检验接口&#xff0c;提前了解到深圳寄…...

sklearn特征选取之RFE

sklearn.feature_selection.RFE 是一种递归特征消除&#xff08;Recursive Feature Elimination, RFE&#xff09;方法&#xff0c;用于通过反复训练模型和消除不重要的特征&#xff0c;逐步减少特征数量&#xff0c;最终选择最重要的特征。它是一种用于特征选择的算法&#xf…...

vue.js 展示树状结构数据,动态生成 HTML 内容

展示树状结构数据&#xff1a; 从 jsonData 读取树状结构的 JSON 数据&#xff0c;将其解析并生成 HTML 列表来展示。树状结构数据根据 id 和 label 属性组织&#xff0c;节点可以包含子节点 children。 展示评级信息&#xff1a; 从预定义的表单字段 form 中读取 arRateFlag 和…...

科技赋能安全,财谷通助力抖音小店腾飞!

在数字经济的浪潮中&#xff0c;短视频与直播带货已成为新时代的商业风口&#xff0c;抖音小店作为这一领域的佼佼者&#xff0c;正引领着无数小微商家踏上创业与转型的快车道。然而&#xff0c;随着市场的日益繁荣&#xff0c;如何有效管理店铺、提升运营效率、保障交易安全成…...

Redis安装教程

Redis安装详细教程 &#x1f4d6;1.单机安装Redis✅安装Redis依赖✅上传安装包并解压✅启动&#x1f9ca;默认启动&#x1f9ca;指定配置启动&#x1f9ca;开机自启 &#x1f4d6;2.Redis客户端✅Redis命令行客户端✅图形化桌面客户端&#x1f9ca;安装&#x1f9ca;建立连接 大…...

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&#xff08;JSR 303/JSR 349&#xff09;中的一个注解&#xff0c;用于确保一个字段或参数值不为 null。这个注解可以用于 Java 类的字段、方法的参数或者方法的返回值上&#xff0c;以确保在运行时这些值不为空。 使用场景 字段验证&#xf…...

408算法题leetcode--第13天

61. 旋转链表 61. 旋转链表思路&#xff1a;注释时间&#xff1a;O(n)&#xff1b;空间&#xff1a;O(1) /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x…...

【MySQL】表的基本查询

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 创建Creator &#x1f4c2; 插入数据 &#x1f4c2; 插入否则更新 &#x1f4c2; 替换 &#x1f4c1; 读取Retrieve &#x1f4c2; select列 &#x1f4c2; where条件 &#x1f4c2; 结果排序 &#x1f4c2; 筛选分页结果…...

李宏毅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《中国数据安全技术发展路线图》

近日&#xff0c;全球领先的IT研究与咨询公司IDC发布报告《IDC TechScape&#xff1a;中国数据安全技术发展路线图&#xff0c;2024》。瑞数信息凭借其卓越的技术实力和广泛的行业应用&#xff0c;被IDC评选为“增量型”技术曲线API安全的推荐厂商。 IDC指出&#xff0c;数据安…...

1.5 计算机网络的性能指标

参考&#xff1a;&#x1f4d5;深入浅出计算机网络 目录 速率 带宽 吞吐量 时延 时延带宽积 往返时间 利用率 丢包率 速率 速率是指数据的传送速率&#xff08;即每秒传送多少个比特&#xff09;&#xff0c;也称为数据率&#xff08;Data Rate&#xff09;或比特率&am…...

【已解决】IDEA鼠标光标与黑块切换问题,亲测有效

前言 前两天我妹妹说她室友的idea光标变成黑块状了&#xff0c;解决不了跑来问我&#xff0c;这是刚入门开发者经常遇到的问题&#xff0c;这篇文章介绍一下这两种方式&#xff0c;方便刚入门的小伙伴儿们更清楚地了解idea&#xff0c;使用idea。 希望这篇文章能够帮助到遇到…...

记一次sql查询优化

记一次sql查询优化 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 今天测试环境发现一个问题&#xff0c;就是测试同事在测试的时候&#xff0c;发现cpu一直居高不下&#xff0c;然…...

str函数的模拟(包括strn函数的模拟)

首先先说这些函数引用的头文件是<string.h> 1.strlen函数 int my_strlen(char* s1) { //这里只用最难的方法 if (*s1) { return my_strlen(s1 1) 1; } else return 0; } 这里使用了递归的方法&#xff08;不创建新的变量&#xff0…...

畅阅读微信小程序

畅阅读微信小程序 weixin051畅阅读微信小程序ssm 摘 要 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用j…...

互联网大厂 Java 求职面试全景:从音视频场景到微服务架构的深入探讨

互联网大厂 Java 求职面试全景&#xff1a;从音视频场景到微服务架构的深入探讨 在互联网大厂的招聘中&#xff0c;Java 开发者的面试不仅技术含量高&#xff0c;还充满了戏剧性。今天&#xff0c;我们将通过一位求职者燕双非与面试官的对话&#xff0c;带你走进这个复杂而有趣…...

H5GG iOS模组引擎:基于JavaScript的iOS应用内存操作与界面定制技术实现

H5GG iOS模组引擎&#xff1a;基于JavaScript的iOS应用内存操作与界面定制技术实现 【免费下载链接】H5GG an iOS Mod Engine with JavaScript APIs & Html5 UI 项目地址: https://gitcode.com/gh_mirrors/h5/H5GG H5GG是一款创新的iOS模组引擎&#xff0c;通过Java…...

无王无帝定乾坤,来自田间第一人 凰标为律正人心

无王无帝定乾坤&#xff0c;来自田间第一人。 世间最大的乱象&#xff0c;从来不止山河动荡、世道纷争&#xff0c;更是人心失序、良知蒙尘。一、旧世千年&#xff1a;王权为纲&#xff0c;律法为束旧制之弊具体表现规则来源由权贵制定&#xff0c;标准随权势偏移治理逻辑重压制…...

AI视频时间一致性失效的7种隐藏诱因(GPU显存碎片化、隐空间梯度漂移、跨模态时钟不同步…业内首次系统归因)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI视频时间一致性失效的系统性归因框架 AI视频生成中&#xff0c;时间一致性失效并非孤立现象&#xff0c;而是多层级模型组件、训练范式与推理机制耦合失配的结果。其根源横跨数据建模、特征传播、时序…...

OPPO新时代板凳精神:解码长期主义研发体系与前沿技术人才战略

1. 从“板凳精神”到“微笑前行”&#xff1a;OPPO的研发哲学与人才战略最近&#xff0c;OPPO在五四青年节发布的那支名为《板凳》的品牌片&#xff0c;以及随之公布的超过2000人的技术研发招聘计划&#xff0c;在科技圈里引发了不小的讨论。很多人乍一看&#xff0c;觉得这又是…...

从Struts2漏洞看Java Web安全:一个OGNL表达式注入引发的十年“血案”

OGNL表达式注入&#xff1a;Struts2框架安全漏洞的十年演进与启示 2006年&#xff0c;当Struts2作为Struts框架的下一代产品首次亮相时&#xff0c;开发者社区对其寄予厚望。这个基于MVC架构的Java Web框架承诺提供更简洁的代码结构和更强大的功能扩展性。然而&#xff0c;很少…...

从虚拟机到私有云:手把手教你用VirtualBox+CentOS 7搭建个人OpenStack学习环境

从虚拟机到私有云&#xff1a;手把手教你用VirtualBoxCentOS 7搭建个人OpenStack学习环境 在个人电脑上搭建OpenStack环境听起来像是企业级IT工程师的专属领域&#xff0c;但事实上&#xff0c;借助VirtualBox这样的免费虚拟化工具和CentOS 7的稳定性&#xff0c;任何人都可以在…...

【亲测免费】 Unity WebGL中文输入插件——为WebGL游戏开启无缝中文输入新时代!

Unity WebGL中文输入插件——为WebGL游戏开启无缝中文输入新时代&#xff01; 【下载地址】UnityWebGL中文输入插件 本仓库提供了一个Unity WebGL中文输入插件&#xff0c;该插件支持输入法跟随和全屏功能。通过使用此插件&#xff0c;开发者可以在WebGL平台上实现中文输入&…...

抖音批量下载神器:一键保存多个创作者的所有视频作品

抖音批量下载神器&#xff1a;一键保存多个创作者的所有视频作品 【免费下载链接】douyinhelper 抖音批量下载助手 项目地址: https://gitcode.com/gh_mirrors/do/douyinhelper 在当前短视频内容爆炸的时代&#xff0c;抖音汇聚了无数创意视频和优质内容。无论是学习舞蹈…...

BesTV_R3300-L S905L芯片刷机实战:从驱动识别到固件烧录的完整避坑指南

1. 认识你的BesTV_R3300-L盒子 我手头这台BesTV_R3300-L盒子已经吃灰大半年了&#xff0c;原厂系统用起来卡顿不说&#xff0c;还经常弹出各种广告。拆开外壳看到S905L芯片的那一刻&#xff0c;我就知道这玩意儿有救——毕竟这是刷机圈里的"老熟人"了。先给新手朋友科…...