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

AUTOSAR_EXP_ARAComAPI的7章笔记(3)

☞返回总目录

相关总结:AutoSar AP简单多绑定总结

7.3 多绑定

如在 5.4.3 小节中简要讨论的,某个代理类 / 骨架类的不同实例之间的技术传输是不同的,多绑定描述了这种情况的解决方案。多种技术原因都可能导致这种情况出现:

  • 代理类使用不同的传输 / IPC 与不同的骨架进行通信。
  • 同样地,对于同一个骨架实例的不同代理实例,也可能使用不同的传输 / IPC 与这个骨架实例进行通信,即骨架实例支持多种传输机制的连接。

7.3.1 简单多绑定的用例

下图描绘了一个简单多绑定的用例。例子中,服务消费者和服务提供者在同一个节点(ECU 内部)中进行通信,服务消费者拥有同一个代理类的两个实例。图中可以看出,服务消费者首先触发了一个 “FindService”,它为搜索到的两个不同服务实例返回了两个句柄。服务消费者为每个句柄实例化了一个代理实例。在这个例子中,服务实例 1 与服务消费者(代理实例 1)位于同一个 AP 应用程序(相同的进程 / 地址空间)中,而服务实例 2 与服务消费者(代理实例 2)位于不同的 AP 应用程序(不同的进程 / 地址空间)中。

图 7.3 中,象征代理和骨架之间传输层的线条颜色不同:代理实例 1 有一个红色的传输层(绑定实现),而代理实例 2 的传输层是蓝色的。颜色不同是因为在代理实现层面上使用的技术不同。如果想努力打造一个性能良好的产品,AP 产品供应商(作为 IPC 绑定实现者的角色)需要这样做!

如图所示,因为代理实例 1 和骨架实例 1 包含在一个进程中,代理实例 1 和服务实例 1 之间的通信(红色)应该优化为一个简单的方法调用。因为代理实例 2 和服务实例 2 之间的通信(蓝色)是真正的 IPC,所以采取的行动成本要高得多,很可能涉及各种系统调用 (涉及到内核上下文切换),以便将调用 / 数据从服务消费者的进程传输到服务提供者的进程(通常使用像管道、套接字或共享内存这样的基本技术,并加上一些用于控制信号)。

从服务消费者开发者角度来看,供应商的 ProxyClass::FindService 实现为两个服务实例获得两个不透明的句柄,从这两个句柄中创建了同一个代理类的两个代理实例。“神奇地” 是,这两个代理实例虽然基于相同的代理类而创建,但是与各自的服务实例连接方式完全不同。所以,句柄中一定以某种方式包含了一些信息,代理类实例从这些信息中知道选择哪种技术传输。虽然乍一看很简单,但再看就不是了…… 问题是:是谁,在什么时候,把这些信息写入句柄中,使得从它创建的代理实例知道应该使用直接方法(函数调用),而不使用更复杂的 IPC 机制,或者反之亦然?

服务实例 1 通过 SkeletonClass::OfferService 在注册表(服务发现)中注册自己的时候吗?这取决于稍后使用它的服务消费者,所以很可能, AP 供应商的 SkeletonClass::OfferService 实现是从骨架的参数中获取所需信息,并通过特定的 IPC 通知 AP 供应商的注册表(服务发现)实现。前面句子中提及许多 “AP 供应商” 是有意的,只是表明,这里讨论的机制都没有标准化,因此可以由 AP 供应商设计和优化。然而,基本步骤将保持不变。所以通常在 SkeletonClass::OfferService 过程中从服务实例传递到注册表(服务发现)的是技术寻址信息,即如何通过本地 IPC 实现连接该服务实例。

通常在一个 AP 节点内部只会使用一种 IPC 机制!如果 AP 供应商在 AP 应用程序之间已经拥有一个优化的本地 IPC 实现,那么 AP 节点内部通常都会使用这个实现。所以 —— 在例子中,假设底层的 IPC 机制是 Unix 域套接字 —— 骨架实例 1 将创建一个套接字连接的文件描述符,并在 OfferService 期间将这个描述符传递给注册表(服务发现)。骨架实例 2 也是如此,只是描述符不同。当服务消费者执行 FindService 时,注册表将把两个服务实例的寻址信息发送给服务消费者(它们作为两个可见的不透明句柄)。

所以在这个例子中,这些句柄看起来完全相同 —— 只有一个小区别,即包含的文件描述符不同,因为它们引用不同的 Unix 域套接字。所以在这种情况下,在代理实例 1 中必须以某种方式检测到直接方法(比如:函数调用)的优化。一种可能的简单技巧是,在骨架实例 1 提供给注册表(服务发现)的寻址信息中,也包含进程的 ID(pid);要么显式地包含,要么将其包含在套接字描述符文件名中。所以服务消费者一侧的代理实例 1 可以简单地检查句柄中的 PID 是否表示与自身相同的进程,然后可以使用优化路径。顺便提一下:检测进程本地优化潜力是一件很平常的事情,几乎每个现有的中间件实现今天都在做 —— 所以无需进一步强调这个话题。

退一步的讲,我们必须认识到,这里的简单例子并没有完全反映多绑定的含义。它确实描述了同一个代理类的两个实例使用不同的传输层来联系服务实例的情况,但正如例子所示,这并没有反映在不同实例的句柄中,而仅仅是一种优化!在我们的具体例子中,使用代理实例 1 与服务实例 1 通信的服务消费者也可以像代理实例 2 一样使用 Unix 域套接字传输,而不会有任何功能损失 —— 只是从非功能性能的角度来看,这显然不好。尽管如此,这个简单的场景还是值得在这里提及,因为它是一个真实的场景,很可能在许多部署中发生,因此必须得到很好的支持!

相关文章:

AUTOSAR_EXP_ARAComAPI的7章笔记(3)

☞返回总目录 相关总结:AutoSar AP简单多绑定总结 7.3 多绑定 如在 5.4.3 小节中简要讨论的,某个代理类 / 骨架类的不同实例之间的技术传输是不同的,多绑定描述了这种情况的解决方案。多种技术原因都可能导致这种情况出现: 代…...

WSADATA 关键字详细介绍

WSADATA 是 Windows Sockets API(Winsock)中用于存储 Winsock 库的初始化信息的结构体。在使用 Winsock API 之前,必须通过调用 WSAStartup() 函数进行初始化,WSADATA 结构体用于接收有关 Winsock 库版本的信息。Winsock 是 Windo…...

Day44 | 动态规划 :状态机DP 买卖股票的最佳时机IV买卖股票的最佳时机III

Day44 | 动态规划 :状态机DP 买卖股票的最佳时机IV&&买卖股票的最佳时机III&&309.买卖股票的最佳时机含冷冻期 动态规划应该如何学习?-CSDN博客 本次题解参考自灵神的做法,大家也多多支持灵神的题解 买卖股票的最佳时机【…...

Area-Composition模型部署指南

一、介绍 本模型可以通过输入不同的提示词,然后根据各部分提示词进行融合生成图片。如下图: 此图像包含 4 个不同的区域:夜晚、傍晚、白天、早晨 二、部署 环境要求: 最低显存:10G 1. 部署ComfyUI 本篇的模型部署…...

策略模式、状态机详细解读

策略模式 (Strategy Pattern) 策略模式 (Strategy Pattern) 是一种行为型设计模式,旨在将一组算法封装成独立的类,使得它们可以相互替换。这种模式让算法的变化不会影响到使用算法的客户,减少了类之间的耦合。策略模式通常用于处理一类问题&…...

OpenWrt广播DNS到客户端

OpenWrt广播DNS到客户端 Network -> Interfaces -> lan ->DHCP Server -> Advanced Settings -> DHCP-Options 设置 6,dns1,dns2 如下图 也可以直接编辑 /etc/config/dhcp config dhcp lan list dhcp_option 6,119.29.29.29,223.5.5.5 #ipv4 option dns 2402:4…...

C++编程技巧与规范-类和对象

类和对象 1. 静态对象的探讨与全局对象的构造顺序 静态对象的探讨 类中的静态成员变量(类类型静态成员) 类中静态变量的声明与定义&#xff08;类中声明类外定义&#xff09; #include<iostream> using namespace std;namespace _nmspl {class A{public:A():m_i(5){…...

AutoHotKey自动热键AHK-正则表达式

在这个软件的操作中,基本都是需要即时的解决一些问题,所以对字符串的操作是比较多的,所以正则的使用还是比较重要的,接下来我们用一个例子来了解正则表达式的使用 str "7654321" RegExMatch(str, "65(43)(21)", SubPat)str ( str %str% SubPat %SubPa…...

【3D Slicer】的小白入门使用指南四

开源解剖影像浏览工具Open Anatomy Browser使用及介绍 和3D slicer米有太大关系,该工具是网页版影像数据的浏览工具(可以简单理解为网页版的3D slicer) 介绍 ● 开放解剖(OA)浏览器是由神经影像分析中心开发的,基于网络浏览器技术构建的图谱查看器。 ● OA浏览器将解剖模…...

flink同步mysql数据表到pg库

1.关闭防火墙和selinux systemctl stop firewalld systemctl disable firewalld systemctl status firewalldvi /etc/selinux/config 修改为disabled2.安装java8 yum list java-1.8* yum install java-1.8.0-openjdk* -yjava -version3.下载和部署postgresql 下载地址&#…...

AndroidStudio-常用布局

一、线性布局LinearLayout 线性布局内部的各视图有两种排列方式: 1.orientation属性值为horizontal时&#xff0c;内部视图在水平方向从左往右排列。 2.orientation属性值为vertical时&#xff0c;内部视图在垂直方向从上往下排列。 如果不指定orientation属性&#xff0c;…...

Vue全栈开发旅游网项目(10)-用户管理后端接口开发

1.异步用户登录\登出接口开发 1.设计公共响应数据类型 文件地址&#xff1a;utils/response404.py from django.http import JsonResponseclass BadRequestJsonResponse(JsonResponse):status_code 400def __init__(self, err_list, *args, **kwargs):data {"error_c…...

[Android]查找java类中声明为native方法的具体实现方法

在android代码中&#xff0c;经常可以看到native方法&#xff0c;需要查看其对应的C方法&#xff0c;这些方法是一一对应的&#xff0c;对应关系是在jni注册里关联起来的。 比较直观的是这样的例子&#xff0c; Parcel.java //Java层的方法里调用了native方法nativeWriteInt…...

Exploring Defeasible Reasoning in Large Language Models: A Chain-of-Thought A

文章目录 题目摘要简介准备工作数据集生成方法实验结论 题目 探索大型语言模型中的可废止推理&#xff1a;思路链 论文地址&#xff1a;http://collegepublications.co.uk/downloads/LNGAI00004.pdf#page136 摘要 许多大型语言模型 (LLM) 经过大量高质量数据语料库的训练&…...

uniapp在app模式下组件传值

在 UniApp 编译成 App 后&#xff0c;传递参数可以通过多种方式实现&#xff0c;常见的方式有以下几种&#xff1a; 1. 通过 URL 参数传递&#xff08;适用于 WebView&#xff09; 如果你的 App 页面通过 WebView 渲染&#xff0c;可以像在 Web 端一样通过 URL 传递参数。例如…...

Docker解决暴露2375端口引发的安全漏洞

docker的暴露api端口2375&#xff0c;没有任何安全防护&#xff0c;我们通过linux系统防火墙&#xff08;iptables&#xff09;来进行ip访问限制 # 查看iptables所有规则 iptables -L -nv # 只允许某个ip访问2375端口 iptables -I INPUT -s 127.0.0.1 -p tcp --dport 2375 -j A…...

HTML5+CSS前端开发【保姆级教学】+新闻文章初体验

Hello&#xff0c;各位编程猿们&#xff01;上一篇文章介绍了前端以及软件的安装&#xff0c;这一篇我们要继续讲解页面更多知识点&#xff0c;教大家做一篇新闻题材的文章 新闻文章 当我们点开浏览器经常看到各种各样的文章&#xff0c;今天我们就来看看大家最喜欢关注的体育…...

『VUE』26. props实现子组件传递数据给父组件(详细图文注释)

目录 本节内容示例代码总结 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 本节内容 父组件传子组件–props 子组件传父组件–自定义事件 本节讲子组件传父组件–通过props里的方法传递,就是父亲写了一个函数,给子组件调用,然后…...

RHCE-DNS域名解析服务器

一、DNS简介 DNS &#xff08; Domain Name System &#xff09;是互联网上的一项服务&#xff0c;它作为将域名和 IP 地址相互映射的一个分布式 数据库&#xff0c;能够使人更方便的访问互联网。 DNS 系统使用的是网络的查询&#xff0c;那么自然需要有监听的 port 。 DNS 使…...

移民统计年鉴(1996-2021年)

年鉴中包含了以下几个方面的数据&#xff1a; 移民数量&#xff1a;记录了每年全球移民的总数&#xff0c;以及不同国家和地区的移民流入和流出情况。 移民类型&#xff1a;区分了经济移民、难民、家庭团聚等不同类型的移民。 移民原因&#xff1a;分析了推动移民的各种因素&…...

MFC1(note)

引言 在学习SDK后我们发现&#xff0c;写消息好麻烦&#xff0c;处理消息更麻烦 处理消息效率低发送消息效率低 所以把SDK中这些消息全部封装好 MFC封装了windows 的大部分API 这里说一下QT架构跨平台 MFC用得如何取决于你SDK的水平 创建 如果打开没有MFC 一般勾选以下…...

1.1 关于游戏编程

1.1.1、游戏中客户端和服务器的交互 游戏通常采用客户端-服务器模式‌。在这种模式下&#xff0c;服务器负责处理游戏的核心逻辑、数据存储和玩家间的交互&#xff0c;而客户端则负责呈现游戏画面、接收玩家输入并与服务器通信‌。 客户端和服务器的作用和功能 ‌客户端‌&a…...

光流法与直接法在SLAM中的应用

本文总结视觉SLAM中常用的光流法与直接法 1、Lucas-Kanade光流法 相机所拍摄到的图像随相机视角的变化而变化&#xff0c;这种变化也可以理解为图像中像素的反向移动。“光流”&#xff08;Optical Flow&#xff09;是指通过分析连续图像帧来估计场景中像素或特征点的运动的技…...

C++模板特化实战:在使用开源库boost::geometry::index::rtree时,用特化来让其支持自己的数据类型

用自己定义的数据结构作为rtree的key。 // rTree的key struct OverlapKey {using BDPoint boost::geometry::model::point<double, 3, boost::geometry::cs::cartesian>; //双精度的点using MyRTree boost::geometry::index::rtree<OverlapKey, boost::geometry::in…...

让空间计算触手可及,VR手套何以点石成金?

引言 如何让一位母亲与她去世的小女儿“重逢”&#xff1f;韩国MBC电视台《I Met You》节目实现了一个“不可能”心愿。 在空旷的绿幕中&#xff0c;母亲Jang Ji-sung透过VR头显&#xff0c;看到了三年前因白血病去世的女儿Nayeon。当她伸出双手&#xff0c;居然能摸到女儿的…...

穿越数据迷宫:C++哈希表的奇幻旅程

文章目录 前言&#x1f4d4;一、unordered系列关联式容器&#x1f4d5;1.1 unordered 容器概述&#x1f4d5;1.2 哈希表在 unordered 容器中的实现原理&#x1f4d5;1.3 unordered 容器的特点 &#x1f4d4;二、unordered_set 和 unordered_map 的基本操作&#x1f4d5;2.1 un…...

SMT32 智能环境监测系统 嵌入式初学者课堂小组作业

一、应用知识 1&#xff0c;开发语言&#xff1a;C语言 2&#xff0c;开发工具&#xff1a;Keil uVision5、Setup_JLinkARM_V415e 3&#xff0c;开发平台&#xff1a;XCOM V2.0 4&#xff0c;开发知识&#xff1a;温湿度传感DHT11、STM32F4xx中文参考手册 5&#xff0c;文…...

20241114给荣品PRO-RK3566开发板刷Rockchip原厂的Android13下适配RJ45以太网卡

20241114给荣品PRO-RK3566开发板刷Rockchip原厂的Android13下适配RJ45以太网卡 2024/11/14 15:44 缘起&#xff1a;使用EVB2的方案&#xff0c;RJ45加进去怎么也不通。 实在没有办法&#xff0c;只能将荣品的SDK&#xff1a;rk-android13-20240713.tgz 解压缩&#xff0c;编译之…...

JVM这个工具的使用方法

JVM&#xff08;Java虚拟机&#xff09;是Java程序运行的基础环境&#xff0c;它提供了内存管理、线程管理和性能监控等功能。吃透JVM诊断方法&#xff0c;可以帮助开发者更有效地解决Java应用在运行时遇到的问题。以下是一些常见的JVM诊断方法&#xff1a; 使用JConsole: JCon…...

创建型设计模式与面向接口编程

创建型设计模式&#xff08;Creational Patterns&#xff09;的主要目的之一就是帮助实现面向接口编程&#xff0c;避免直接创建实现类的实例。通过这些模式&#xff0c;可以将对象的创建过程封装起来&#xff0c;使得客户端代码不需要知道具体的实现类&#xff0c;从而提高代码…...