自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 DDS 零拷贝(Zero-Copy)

DDS 内置工具系统性能工具perf(Linux),dtraceSystemTap(Linux),vmstatiostatnetstattcpdumpWireshark内存调试工具Valgrind(ASan),(LSan)。日志在关键点(loan, write, take, return loan)添加详细的日志记录。

2025-06-24 11:30:37 1321

原创 DDS RTPS

它解决了分布式实时系统中关键的服务发现和高效、可靠、可扩展的数据传输问题。通过定义标准化的线协议、发现机制(SPDP/SEDP)和消息交换机制(Data, Heartbeat, AckNack, Gap),RTPS 确保了不同 DDS 实现之间可以无缝协作,并支撑了 DDS API 所承诺的各种服务质量(QoS)。它定义了DDS实体(如DataWriter和DataReader)之间如何在网络上实际交换信息,实现发布-订阅模型的互操作性和实时通信。

2025-06-23 11:05:22 806

原创 Git 分布式版本控制

Git 是一个,由 Linus Torvalds 于 2005 年为管理 Linux 内核开发而创建。与 SVN 等集中式系统不同,Git 每个开发者都有完整的仓库副本,实现离线操作和高可靠性.gitgit addmainfeature-b [分支名]-p--patch-a--amend--short-bgit diff--stagedHEAD~[n]git branch-a-r-d [分支名]-D [分支名]-b [新分支名]-- [文件路径]--no-ff--abortgit pull--rebase。

2025-06-20 13:38:17 648 1

原创 DDS 问题排查

DDS(Data Distribution Service)协议栈在构建高性能、实时、分布式系统(如自动驾驶、工业控制、航空航天、金融交易等)中扮演着核心角色。然而,其复杂性和对网络、配置的高度依赖,使得在实际使用中难免会遇到各种问题。

2025-06-19 17:12:17 1167

原创 repo 工具

是 Google 为管理多个 Git 仓库而开发的工具,主要用于 Android 开源项目(AOSP)等大型项目。)统一管理多个 Git 仓库的依赖关系。:在大型项目(如 Android 系统)中,组合使用。当需要跨 100+ 仓库执行操作时,命令与对应 git 命令对照表。专为代码评审系统设计,比直接。多了自动生成评审请求的功能。效率显著高于手动循环执行。命令使用效果更佳(如。

2025-06-19 17:11:45 1575

原创 DDS 发现机制

DDS发现机制的核心挑战是平衡实时性资源开销和扩展性。嵌入式场景(如MCU)→ 静态配置+内存管理优化;大型动态网络(如云边协同)→ 发现服务器+轻量过滤算法;广域网→ 单播发现+租约调优。未来趋势是与AI运维结合(如自动调参),并深化Serverless架构支持。

2025-06-19 08:48:18 1238

原创 DDS QoS

DDS的QoS策略用于控制数据传输的可靠性、实时性、资源分配等行为,确保分布式系统在复杂场景下的性能。其核心目标是实现“在正确的时间、正确的位置传递正确的数据”。(域参与者)(发布者/订阅者)(数据写入器/读取器)Topic(主题)以下是基于OMG DDS 规范 (v1.4)的22 个 QoS 策略QoS 策略作用域关键参数/类型协商规则默认值USER_DATATopicDataWriterDataReaderPublisherSubscriber(二进制数据)不参与协商空序列。

2025-06-18 14:50:30 681

原创 DDS(Data Distribution Service)

DDS协议栈 是一个强大的、标准化的、以数据为中心的发布-订阅通信中间件协议栈。其核心在于全局数据空间的概念、丰富的可配置QoS策略以及完全去中心化的动态发现机制。这些特性使其在需要高性能、高可靠性、强实时性、动态拓扑和复杂数据流管理的分布式系统中成为理想选择。理解其DCPS模型、QoS协商机制和自动发现原理是掌握DDS的关键。选择合适的DDS实现并正确配置QoS对于构建成功的DDS应用至关重要。QoS是灵魂:精确配置和权衡 QoS 策略以满足应用需求(可靠性、实时性、资源限制)是首要任务。网络是关键。

2025-06-18 14:44:34 1517

原创 C/C++ 格式说明符

在 C/C++ 中,格式说明符(Format Specifiers)主要用于printf()scanf()等输入输出函数中,用于控制数据的格式化输入和输出。

2025-05-22 09:55:35 684

原创 Python 内置装饰器

特别是对于数据类。

2025-01-10 10:38:59 458

原创 Python 装饰器

要定义一个装饰器,我们需要编写一个函数,该函数接受一个函数作为参数,并返回一个新的函数。func()在这个例子中,是一个装饰器函数,它接受一个函数func作为参数。wrapper函数是装饰器内部定义的一个新函数,它在调用func之前和之后分别打印了一些信息。最后,返回wrapper函数。Python 装饰器是一种非常强大的工具,它可以帮助我们以一种简洁和可读的方式扩展函数的功能。通过装饰器,我们可以在不修改原始函数代码的情况下,增加或改变函数的行为。

2025-01-10 10:38:44 959

原创 Python 数据类型转换

Python 中的数据类型转换是将一种数据类型转换为另一种数据类型的过程,数据类型转换可以分为和两种方式。

2025-01-09 15:24:12 731

原创 Python 类 Class

这里是初始化方法,相当于构造函数ClassName:类名,通常采用首字母大写的驼峰命名法。__init__:类的初始化方法,当创建类的新实例时会自动调用。它的第一个参数总是self,代表类的实例本身。

2025-01-07 16:40:23 727

原创 Python 迭代器与生成器

Python 中的迭代器和生成器是处理集合元素的重要工具,它们在处理大量数据时特别有用,因为它们不需要一次性将所有数据加载到内存中。

2024-12-30 20:34:37 563

原创 Python Lambda 表达式

Python 中的 lambda 表达式是一种简洁的匿名函数,允许你在不需要完整函数定义的情况下创建函数。它们通常用于编写简单的函数,或者在需要传递函数作为参数时使用。

2024-12-28 11:21:44 275

原创 C++ Lambda 表达式

在现代编程中,匿名函数(Anonymous Functions)或称为 lambda 表达式,已经成为一种非常流行的编程构造。它们允许开发者在不定义传统函数的情况下创建函数。C++11 引入了对 Lambda 表达式的原生支持,极大地丰富了语言的表达能力和灵活性。

2024-12-27 10:57:44 484

原创 Python 内置函数

【代码】Python 内置函数。

2024-12-27 10:03:42 551

原创 Python 并发

在现代编程中,充分利用系统资源以提高程序性能是一个重要的目标。Python提供了多种并发编程的方式,包括和。

2024-12-25 14:02:26 678

原创 Python 正则表达式

正则表达式(regular expression)是一种用于匹配字符串中字符组合模式的工具。它可以用来检查一个字符串是否匹配某个模式、提取字符串中的信息、替换字符串中的某些部分等。Python 的re模块提供了对正则表达式的支持,允许你执行复杂的字符串搜索、替换、匹配和分割操作。

2024-12-24 15:16:22 1347

原创 Python 多进程

Python的模块允许你创建和管理进程。多进程是指同时运行多个进程,每个进程都有自己的Python解释器和内存空间。多进程适用于任务,因为每个进程有自己的Python解释器和内存空间,可以在不同的CPU核心上运行,不受GIL的限制。

2024-12-11 20:03:53 754

原创 Python 多线程

Python的多线程是通过threading模块实现的,它允许你创建线程并行执行任务。多线程适用于任务,如网络请求或文件操作。由于Python的全局解释器锁(),多线程可能不适用于CPU密集型任务。

2024-12-11 20:02:49 972

原创 C++ 继承

C++ 中的继承是一种面向对象编程的特性,它允许一个类(称为派生类或子类)继承另一个类(称为基类或父类)的属性和方法。继承支持代码的重用,并允许创建一个层次结构的类。

2024-12-07 22:17:55 814

原创 C++ 多态

抽象类是包含至少一个纯虚函数(pure virtual function)的类,纯虚函数使用= 0定义。抽象类不能被直接实例化,通常用作接口。包含纯虚函数的类称为抽象类。抽象类不能被直接实例化,但可以作为基类来使用。派生类必须重写抽象类中的所有纯虚函数,才能被实例化。public:// 纯虚函数public:void pureVirtualFunction() override { // 必须重写纯虚函数// 调用重写的纯虚函数return 0;

2024-12-06 08:57:58 974

原创 C++ 模板

C++ 模板(Template)是一种,允许开发者编写可以在多种数据类型上工作的代码。模板可以将类型作为参数,使得代码可以在不同的数据类型上重用。模板可以用于和,使得同一份代码可以用于不同的数据类型。

2024-12-05 15:08:16 844

原创 C++ 简介

C++是一种由Bjarne Stroustrup在1979年在贝尔实验室开始开发的一种的编程语言。C++被设计为一种“增强”的C语言,保留了C语言的高效性和灵活性,同时引入了和等特性。

2024-12-02 16:25:42 961

原创 C++ 预处理器(Preprocessor)

用于定义宏。可以定义简单的宏,也可以定义带参数的宏。// 宏定义(#define)// 宏定义(#define) # define MACRO_NAME replacement - text // 取消宏定义(#undef) # undef MACRO_NAMEMACRO_NAME是想要定义的宏的名称。是当宏被使用时将替换宏名称的文本。1024MAX_SIZE被定义为1024。在代码中任何使用MAX_SIZE的地方,预处理器都会将其替换为1024。SQUARE(x)被定义为。当你调用。

2024-11-30 17:43:08 1347

原创 C++ 类(Class)

C++中的类(Class)是一种用户定义的数据类型,它封装了数据(成员变量)和操作这些数据的函数(成员函数)。成员,没有基类的自定义移动赋值运算符,编译器会生成一个默认移动赋值运算符。在C++中,如果类没有显式定义某些成员函数,编译器会根据需要自动生成默认成员函数。成员,没有基类的自定义移动构造函数,编译器会生成一个默认移动构造函数。在C++中,类的成员函数是定义在类内部的函数,它们可以访问类的私有和保护成员。成员函数定义了类的行为。在C++中,类的成员变量是定义在类内部的变量,它们代表了类的状态。

2024-11-28 10:52:21 1355

原创 C++ 结构体(Struct)

结构体是一种用户自定义的数据类型,它允许我们将多个变量组合在一起,这些变量可以是不同的数据类型。// ...在C++中,结构体与类(class)非常相似,主要区别在于默认的访问权限:结构体的成员默认是public,而类的成员默认是private。

2024-11-26 20:07:51 1354

原创 C++ 容器

C++ 容器(Container)是指一种数据结构,用于存储和管理一组元素。容器提供了一种方便的方式来存储和访问数据,支持各种算法和迭代器。

2024-08-27 10:51:53 632

原创 C++ 内存管理

(Stack Memory):栈内存是由编译器自动管理的内存区域,用于存储函数的局部变量、函数参数和返回值。当函数调用时,栈内存会自动分配,当函数返回时,栈内存会自动释放。静态变量在程序启动时分配内存,在程序结束时释放内存。(Heap Memory):堆内存是由程序员手动管理的内存区域,用于存储动态分配的内存的区域。智能指针是 C++11 引入的一种内存管理方式,用于自动管理内存,避免内存泄漏和野指针。容器是 C++ 标准库提供的一种内存管理方式,用于自动管理内存,避免内存泄漏和野指针。

2024-08-19 09:58:21 999

原创 C++ 数据类型

这种转换发生在表达式中,当一个类型的值被赋给另一个类型的变量时,或者当一个类型的值被用于另一个类型的运算时。C++ 类型转换是指将一个类型的值转换为另一个类型的值。C++ 提供了多种类型转换的方法,包括隐式转换和显式转换。它可以将一个类型的值转换为另一个类型的值,并进行运行时检查。它可以将一个常量类型的值转换为一个非常量类型的值。它可以将一个类型的值转换为另一个类型的值,但不进行运行时检查。它可以将一个类型的值转换为另一个类型的值,但。显式转换是指使用特定的语法进行类型转换。

2024-08-15 16:15:55 962

原创 C++ 字符串

char[] 转换为 std::wstring:可以先将 char[] 转换为 std::string,然后再将 std::string 转换为 std::wstring。std::wstring 转换为 char[]:可以先将 std::wstring 转换为 std::string,然后再将 std::string 转换为 char[]。std::wstring 转换为 std::string:可以使用 std::wstring_convert 类。char* 转换为 char[]:可以直接赋值。

2024-08-07 10:40:02 747

原创 C++ 数组类型

定义 C++ 数组C++ 数组可以使用以下语法定义:初始化 C++ 数组C++ 数组可以使用以下语法初始化:访问 C++ 数组元素C++ 数组元素可以使用以下语法访问:C++ 数组的特点C++ 数组的使用场景需要固定大小数组:C++ 数组适用于需要固定大小数组的场景,如函数参数、结构体成员等。需要高性能:C++ 数组适用于需要高性能的场景,如游戏开发、科学计算等。需要兼容 C 代码:C++ 数组适用于需要兼容 C 代码的场景,如调用 C 函数等。std::array 是 C++11 引入的数组容器

2024-08-05 21:04:18 1104

原创 TCP/UDP

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,其传输的单位是报文段。特征面向连接:在数据传输之前,需要建立一个可靠的连接。可靠传输:通过序列号、确认应答和重传机制来保证数据的可靠传输。TCP 如何保证可靠传输序号: TCP 为每个数据包分配一个序号(Sequence Number),以便接收端可以按序号顺序重组数据包。确认: TCP 接收端会发送确认(ACK)包,确认接收端已收到数据包。重传。

2024-08-01 11:09:14 1095

原创 C++ 任务队列

(来自ChatGPT)任务队列是一种数据结构,用于存储和管理任务(Task)的执行顺序和优先级。任务队列通常由一个队列(Queue)组成,用于存储任务的执行顺序和优先级。任务队列的优点:高效的任务执行: 任务队列可以高效地执行任务,减少任务的等待时间和提高系统的吞吐量。任务优先级管理: 任务队列可以管理任务的优先级,确保高优先级任务先执行。任务调度管理: 任务队列可以管理任务的调度,确保任务按照正确的顺序和优先级执行。可伸缩性: 任务队列可以根据系统的负载动态调整任务的数量和优先级。可靠性。

2024-07-30 13:50:50 1086 1

原创 C++ 多线程

条件变量通常与互斥量一起使用,用于在线程之间进行通信,允许一个线程等待直到满足特定条件,而另一个线程则通知条件满足。互斥量是一种常用的同步机制,用于保护对共享资源的访问,确保任何时候只有一个线程可以访问受保护的资源。C++ 多线程是指在一个程序中同时运行多个线程,每个线程都可以执行不同的代码段。原子类型用于在不使用锁的情况下实现线程安全的操作,适用于简单的数据类型和操作。C++ 多线程性能优化是一个复杂的话题,涉及到很多因素,包括。:线程池可以减少线程创建和销毁的开销。:任务队列可以优化线程调度。

2024-07-29 16:41:54 914

原创 面向服务的架构(SOA)

面向服务的架构(Service-Oriented Architecture, SOA)是一种,它将应用程序结构化为一组相互通信的服务。每个服务代表一个业务能力或一组相关功能,可以通过标准化的接口和协议访问。核心理念是将复杂的应用分解成一系列松耦合的服务,这些服务可以独立部署、管理和重用。(Request-Response Pattern):客户端发送请求给服务,服务处理请求并返回响应。(Event-Driven Pattern):服务发布事件,其他服务或客户端可以消费这些事件。

2024-07-29 16:15:04 2884

原创 C++ 进程 线程

线程间通信是指多个线程之间交换数据和协调工作的机制。由于线程之间共享同一个进程的虚拟地址空间,因此可以使用共享变量、互斥锁、条件变量等机制来实现线程间通信。进程间通信(Inter-Process Communication,IPC)是指不同进程之间的数据交换和同步。C++中的线程(Thread)是一种轻量级的进程,是一个程序中的最小执行单元。,它允许开发者异步执行一个函数,即在一个独立的线程中执行该函数。C++11标准中引入了std::thread类,提供了创建和管理线程的功能。,表示单个线程的执行。

2024-07-22 21:53:49 1617

原创 C++ 单例模式 实现

单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。

2024-07-17 18:58:01 1597

原创 C++ 指针、智能指针、引用

控制块中有强弱引用计数,如果是使用make_shared初始化的函数则它所在的控制块空间是在所引用的shared_ptr中同一块的空间,若是new则控制器所分配的内存与shared_ptr本身所在的空间不在同一块内存。但是,悬空指针不能直接访问对象的成员变量或成员函数,因为编译器不知道指针所指向的对象的类型。也就是说,一个指针指针是一个指针,它的值是另一个指针的地址。悬空指针(Void Pointer)是一种特殊类型的指针,它可以指向任何类型的对象,但不能直接访问对象的成员变量或成员函数。

2024-07-16 20:31:39 1234

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除