「连载」边缘计算(二十一)02-26:边缘部分源码(源码分析篇)

(接上篇)

DeviceTwin struct组成剖析

该部分对DeviceTwin struct的组成进行剖析。接着devicetwin struct调用剖析的实例化DeviceTwin struct(dt := DeviceTwin{})往下剖析,进入DeviceTwin struct的定义,具体如下所示。

KubeEdge/edge/pkg/devicetwin/devicetwin.go

//DeviceTwin the module

type DeviceTwin struct {

context      *context.Context

dtcontroller *DTController

}

DeviceTwin struct的定义 *context.Context 和 *DTController两部分组成。其中,*context.Context可以参考8.3.2,这里不再赘述。下面重点剖析DTController

DTController的定义具体如下所示。

KubeEdge/edge/pkg/devicetwin/dtcontroller.go

//DTController controller for devicetwin

type DTController struct {

HeartBeatToModule map[string]chan interface{}

DTContexts        *dtcontext.DTContext

DTModules         map[string]dtmodule.DTModule

Stop              chan bool

}

DTController struct定义中发现\*dtcontext.DTContextdtmodule.DTModule的定义具体如下所示。

KubeEdge/edge/pkg/devicetwin/dtcontext/dtcontext.go

//DTContext context for devicetwin

type DTContext struct {

GroupID        string

NodeID         string

CommChan       map[string]chan interface{}

ConfirmChan    chan interface{}

ConfirmMap     *sync.Map

ModulesHealth  *sync.Map

ModulesContext *context.Context

DeviceList     *sync.Map

DeviceMutex    *sync.Map

Mutex          *sync.RWMutex

// DBConn *dtclient.Conn

State string

}

DTContext struct的定义可以看出,DTContext struct主要用来实现devicetwin的通信和缓存。DTModule.DTModule struct定义如下所示。

KubeEdge/edge/pkg/devicetwin/dtmodule/dtmodule.go

//DTModule module for devicetwin

type DTModule struct {

Name   string

Worker dtmanager.DTWorker

}

在 DTModule struct定义中,dtmanager.DTWorker是interface type,定义如下所示。

KubeEdge/edge/pkg/devicetwin/dtmanager/dtworker.go

//DTWorker worker for devicetwin

type DTWorker interface {

Start()

}

dtmanager.DTWorker的interface type可以推测DTModule有多种类型,而且都实现了DTWorker interface。KubeEdge/edge/pkg/devicetwin/dtmodule/dtmodule.go中的InitWorker()就是用来实例化DTModule的多种类型的,具体定义如下所示。

KubeEdge/edge/pkg/devicetwin/dtmodule/dtmodule.go

// InitWorker init worker

func (dm *DTModule) InitWorker(recv chan interface{}, confirm chan interface{}, heartBeat chan interface{}, dtContext *dtcontext.DTContext) {

switch dm.Name {

case dtcommon.MemModule:

dm.Worker = dtmanager.MemWorker{

Group: dtcommon.MemModule,

Worker: dtmanager.Worker{

ReceiverChan:  recv,

ConfirmChan:   confirm,

HeartBeatChan: heartBeat,

DTContexts:    dtContext,

},

}

...

}

InitWorker()函数的定义中可以梳理出,DTModuleMemWorkerTwinWorkerDeviceWorkerCommWorker四种类型。

到此,EdgeCoredevicetwin的struct调用剖析就全部结束了。

未完待续…… 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编程笔记 Golang基础 033 反射的类型与种类

编程笔记 Golang基础 033 反射的类型与种类 一、反射的类型和种类二、切片与反射三、集合与反射四、结构体与反射五、指针与反射六、函数与反射小结 反射机制的作用范围涵盖了几乎所有的类型和值的操作层面,它极大地增强了Go语言在运行时对于自身类型系统的探索和操…

Python实现自动检测设备连通性并发送告警到企业微信

背景:门禁机器使用的WiFi连接,因为某些原因会不定期自动断开连接,需要人工及时干预,以免影响门禁数据同步,故写此脚本,定时检测门禁网络联通性。 #首次使用要安装tcping模块 pip install tcpingfrom tcpin…

Pandas读取两个excel并join

Pandas 的 join就是merge,代码如下 import pandas as pd #读取两张表 dfpd.read_excel(“左表”) #读取右表的第三个sheet中的数据 df2pd.read_excel(“右表”,sheet_name“Sheet3”) #以左表为主表,左连接 outpd.merge(df ,df2 ,on‘query’ ,how‘lef…

【学习笔记】Serdes中的高速接口设计

参考文献: 一、绪论 1.1 背景 “串行替代并行”: 串行传输使用差分信号传输以传输更长距离; 并行传输因串扰无法长距离传输;并行线路对信号偏斜量的要求,限制了最大的传输速率。 SerDesSerializer Deserializer S…

欧拉函数性质和快速幂算法及python实现

目录 欧拉函数 快速幂算法 快速模幂算法 欧拉函数 两个不同的正整数a,b,若gcd(a,b)1,则a和b互质,1与任何正整数都互质 欧拉函数的意义 φ(n) 表示小于或等于正整数n的所有正整数中与n互质的数的个数 如φ(32) 16,即小于32的数中有16个…

Prompt 编程的优化技巧

一、为什么要优化 一)上下文限制 目前 GPT-3.5 以及 GPT-4最大支持 16K 上下文,比如你输入超过 16k 的长文本,ChatGPT 会提示文本过大,为了避免 GPT 无法回复,需要限制 上下文在16k 以内 上下文对于 GPT 来说是非常重…

STL常用容器(vector容器)---C++

STL常用容器目录 2.vector容器2.1 vector基本概念2.2 vector构造函数2.3 vector赋值操作2.4 vector容量和大小2.5 vector插入和删除2.6 vector数据存取2.7 vector互换容器2.7.1 vector互换容器收缩内存空间 2.8 vector预留空间 2.vector容器 2.1 vector基本概念 功能&#xf…

自然语言处理(NLP)—— 神经网络自然语言处理(2)实际应用

本篇文章的第一部分是关于探索词嵌入(word embedding)向量空间。词嵌入是一种语言模型和文本表示技术,其中单词或短语从词汇表被映射到向量的高维空间中。通过这种方式,可以通过计算向量之间的距离来捕捉单词之间的语义关系。 1.…

AttributeError: module ‘tensorflow‘ has no attribute ‘__version__‘

可能的原因是环境中安装了与标准TensorFlow包不同的包,或者可能是TensorFlow没有正确安装。解决方法如下,亲测有效 pip install --upgrade --force-reinstall tensorflow–force-reinstall:通常,如果已经安装了请求的包的最新版本…

PyQt 逻辑与界面分离

将逻辑与界面分离是一种良好的软件设计实践,可以提高代码的可维护性和可扩展性。在使用 pyuic 工具转换 Qt Designer 的 .ui 文件时,你可以通过以下方式实现逻辑与界面的分离: 创建一个单独的 Python 模块,用于编写主窗口的逻辑代…

2024-02-23(Spark)

1.RDD的数据是过程数据 RDD之间进行相互迭代计算(Transaction的转换),当执行开启后,代表老RDD的消失 RDD的数据是过程数据,只在处理的过程中存在,一旦处理完成,就不见了。 这个特性可以最大化…

技术社区项目—借助Logback 的扩展机制实现异常感知并进行邮件推送异常信息

使用 Logback 的扩展机制实现异常感知并进行邮件发送的流程可以分为以下几个步骤: 引入 Logback 依赖: 首先确保项目中引入了 Logback 的相关依赖,可以通过 Maven、Gradle 或其他构建工具来管理依赖。编写自定义 Appender: 创建一个自定义的 Logback Ap…

七、ChatGPT为什么会被热炒?

2023年上半年,ChatGPT引起了广泛的热议,对于ChatGPT有多热,不需要我重复了,你可能在网上看到了很多报道,标题如《ChatGPT揭开AI战幔:杀死黄页一样摧毁Google?》和《ChatGPT强势来袭,…

R语言空间分析、模拟预测与可视化

随着地理信息系统(GIS)和大尺度研究的发展,空间数据的管理、统计与制图变得越来越重要。R语言在数据分析、挖掘和可视化中发挥着重要的作用,其中在空间分析方面扮演着重要角色,与空间相关的包的数量也达到130多个。在本…

搜维尔科技:第九届元宇宙数字人大赛,参赛小组报名确认公告

各位参赛选手大家好,近期已收到新增报名信息如下表,请各位参赛选手确认,如果信息有误或信息不完整请电话联系赛务组工作人员进行更正 随着元宇宙时代的来临,数字人设计成为了创新前沿领域之一。为了提高大学生元宇宙虚拟人角色策划…

uniapp实现单选框

采用uniapp-vue3实现的一款单选框组件,提供丝滑的动画选中效果,支持不同主题配置,适配web、H5、微信小程序(其他平台小程序未测试过,可自行尝试) 可到插件市场下载尝试: https://ext.dcloud.net…

SpringBoot实现缓存预热方案

缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。 那么问题来了,在 Spring Boot 项目启动之后,在什么时候?在哪里可以将数据加载到缓存系统呢? 实现方案概述 在 Spring Boot 启动之后,可以通过以下手段实现缓存预热: 使用…

数据界的达克摩斯之剑----深入浅出带你理解网络爬虫(First)

目录 一.引言 二.网络爬虫产生的背景 三.爬虫背后的相关技术和原理 1.插入URL的概念解析 2.常见的几种URL格式 四.网络爬虫的分类 1.通用网络爬虫 2.增量式网络爬虫 3.Deep Web爬虫 一.引言 网络爬虫是一种自动获取网页内容的程序或技术。它就像一只“小蜘蛛”&#x…

Java设计模式 | 七大原则之依赖倒转原则

依赖倒转原则(Dependence Inversion Principle) 基本介绍 高层模块不应该依赖低层模块,二者都应该依赖其抽象(接口/抽象类)抽象不应该依赖细节,细节应该依赖抽象依赖倒转(倒置)的…

Redis 16种妙用

1、缓存 2、数据共享分布式 3、分布式锁 4、全局ID 5、计数器 6、限流 7、位统计 8、购物车 9、用户消息时间线timeline 10、消息队列 11、抽奖 12、点赞、签到、打卡 13、商品标签 14、商品筛选 15、用户关注、推荐模型 16、排行榜 1、缓存 String类型 例如:热点…