- 博客(71)
- 资源 (1)
- 收藏
- 关注
原创 优先级反转(Priority Inversion)
当一个 低优先级任务 正在执行, 这时 一个高优先级任务 需要马上运行。但是高优先级的任务因为必须等待 低优先级的任务释放某种资源(比如共享数据、设备等),而 低优先级任务又被一个中优先级的任务抢占,从而导致高优先级任务实际上以低优先级的速度运行,整个系统的优先级调度秩序被“反转”了的异常情况。
2025-08-21 19:57:55
973
原创 策略模式(Strategy Pattern)
策略模式:定义一组可互换的算法, 将每个算法封装起来,使它们可以互相替换,并让算法的变化独立于使用算法的客户,在C++中是基于纯虚函数来实现的。
2025-08-14 13:14:06
387
原创 ROS系统框架
ROS是一个面向机器人应用的系统框架,提供基础设施层、通信层和应用层的分层架构。其核心采用计算图模型组织节点化服务,通过话题、服务、动作等IPC机制实现异步/同步通信。ROS 2.0引入DDS中间件优化通信性能,支持共享内存等底层加速。这种解耦式设计使系统具备分布式部署能力,各节点可分别实现感知、规划等机器人功能。
2025-08-14 01:13:55
1015
原创 管理复杂系统的重要方法: MALH
复杂系统设计的四大核心原则 — 模块化(Modularity)、抽象(Abstraction)、分层(Layering)与等级(Hierarchy)
2025-08-10 16:48:42
264
原创 FMA(fused multiply-add) 融合乘加
“融合乘加”(Fused Multiply-Add,简称 FMA)是计算机体系结构和数值计算中一项非常重要的技术。它指的是一条单一的硬件指令,能够同时执行一次乘法和一次加法运算。 它是现代 CPU、GPU 和数值密集型应用(科学计算、AI、图形学等)高性能和高精度计算的基石。
2025-06-17 10:00:32
1615
原创 从矩阵到卷积: AI世界的数学秘密
矩阵是AI中表示和处理多维数据的核心工具,它能高效表达图像、文本等的结构和变换关系。卷积是一种“局部感知+权重共享”的矩阵操作方式,是 AI 中提取特征的利器。它和矩阵乘法一样,是现代深度学习的基础操作之一。
2025-06-16 17:09:17
1206
原创 C++中的完美转发(Perfect Forwarding)
完美转发(Perfect Forwarding)是C++11引入的一个重要特性,它允许 函数模板 将参数以其原始的值类别(左值或右值)转发给其他函数。 也就是说完美转发是为 模板函数 和 泛型编程 设计的技术。
2025-06-05 13:28:45
1059
原创 Bazel中 Analysis阶段运行的Rule不能访问文件怎么办?
在Analysis阶段会运行rule的实现函数,但此时所有文件还只是“声明”, 不能在这个阶段读取任何文件内容。
2025-04-22 10:59:29
658
原创 Bazel中的宏(Macro)中调用的规则是按照先后顺序执行的吗?
Bazel 本身是一个 声明式的构建系统,构建规则的执行顺序是由 依赖图(DAG) 决定的,而不是宏中代码的书写顺序。
2025-04-08 14:12:33
389
原创 Bazel中定义依赖关系
在 Bazel 中,明确地定义依赖关系是构建系统成功的关键,这也正是它高效、可重复、可缓存的原因之一。Bazel 永远不会猜测构建顺序,而是根据你定义的依赖图来调度每一个构建动作。 可以把 Bazel 理解为一个大型的 “声明式有向图构建器”,每一个节点(rule)都要告诉 Bazel:“我需要哪些前置节点”,它才能高效调度和增量构建。
2025-04-08 13:58:00
1158
原创 Bazel中的Symbol, Rule, Macro, Target, Provider, Aspect 等概念
除了 Symbol、Rule、Macro、Target、Provider、Aspect 这些核心概念,Bazel 还有Repository、Package、Workspace、Configuration、Build Event Protocol、Starlark、Transition、Action 的概念。
2025-04-03 17:09:26
1154
原创 必须掌握的Bazel基础和关键概念
Bazel 的核心知识点很多,但有一些是 必须掌握的基础和关键概念,包括 Bazel 构建阶段、依赖管理、构建规则、缓存机制等。
2025-03-05 14:48:50
1232
原创 什么是Autosar ? Classic Autosar 与 Adaptive Autosar的区别 ?
AUTOSAR(Automotive Open System Architecture)是一种汽车软件架构标准,旨在推动汽车电子系统的标准化和可重用性。AUTOSAR定义了一组规范和标准,旨在简化汽车电子系统的开发、集成和维护,并促进不同供应商之间的合作。它提供了一种开放式和标准化的方法,使不同的汽车电子控制单元(ECU)能够在同一车辆上无缝地协同工作。Classic AUTOSAR主要适用于传统的实时控制应用,而Adaptive AUTOSAR则更适用于高度灵活和动态可配置的汽车电子系统,特别是涉及连
2023-07-21 14:20:24
2287
原创 关于 std::condition_variable
std::condition_variable 是 C++ 标准库提供的一个线程同步的工具,用于实现线程间的条件变量等待和通知机制。条件变量的发生通常与某个共享变量的状态改变相关。 在多线程编程中,条件变量通常和互斥锁(std::mutex)一起使用,以避免死锁等问题。
2023-05-10 14:22:42
1601
原创 C++中的右值引用
右值引用是C++11中新增的一个特性,它的出现主要是为了优化程序的性能和提高代码的可读性。 右值引用本质上是一个指向右值的引用,通过右值引用可以实现移动语义和完美转发等功能,从而提高程序的效率和灵活性。
2023-03-28 16:14:15
2108
原创 C++20中的span容器
span 是一个轻量级的非拥有式容器,它提供了对连续内存的引用。span 的主要用途是作为函数参数,可以避免不必要的内存拷贝,并且可以防止悬垂指针和空指针引用的问题。
2023-03-03 10:46:56
5979
原创 PImpl(Pointer to Implementation)指向实现的指针
PImpl是Pointer to Implementation的缩写,也被称为“编译期实现”,是一种C++设计的模式。 用于将类的实现细节与其公共接口分离开来。该模式的核心思想是 通过一个指向类的实现的指针来隐藏类的实现细节,从而提高类的封装性和安全性。
2023-03-01 16:57:36
1962
原创 IO多路复用 select、poll 和epoll [Linux高并发服务器开发]
IO多路复用技术 又名 IO多路转接。 IO多路复用使得 程序能同时监听多个文件描述符,只处理输入、输出有变化的套接字,能够提高程序从处理并发的性能。 系统调用主要有select、 poll 和 epoll。
2022-03-01 18:59:22
1175
原创 Linux 进程间通信 之 共享内存 [Linux高并发服务器开发]
一、共享内存的概念共享内存允许两个或者多个进程共享物理内存的同一块区域(通常称为段)。 由于一个共享内存段会称为一个进程用户空间的一部分。 因此这种IPC机制无需内核介入,所需要做的是让一个进程将数据复制进共享内存中,并且这部分数据会对其他所有共享同一个段的进程可用。与管道等要求发送进程将数据从用户空间的缓冲区复制进内核内存和接收进程将数据从内核内存复制进用户空间的缓冲区的做法相比,这种 IPC 技术的速度更快。
2022-02-22 11:31:23
672
1
原创 Linux 进程间通信 之 内存映射 [Linux高并发服务器开发]
内存映射 (Memory-mapped I/O)是将磁盘文件的数据映射到内存,用户通过修改内存从而修改磁盘文件。 对内存直接操作,因此效率比较高。内存映射相关的系统调用://建立内存映射void *mmap(void* addr, size_t length, int port, int flags , int fd, off_t offset);//解除内存映射int munmap(void *addr, size_t length);
2022-01-21 00:50:32
1479
原创 Linux中使用 有名管道 实现聊天功能 [Linux高并发服务器开发]
使用两个有名管道,进行双向聊天的交互。 对进程A,主进程以只写的方式去向管道1中写数据,创建进程A的子进程,以只读的方式从管道2中读数据; 对进程B,主进程以只读的方式去读管道1中的数据,创建进程B的子进程,以只写的方式向管道2中写数据, 这样就是实现了,两个进程之间,聊天的功能。
2022-01-12 12:44:56
711
原创 死锁的定义 和 处理策略
如果一个进程集合中的 每个进程 都在等待 只能由进程集合中的其他进程 才能引发的事件,那么,该进程集合就是死锁的。由于所有的进程都在等待,所有没有一个进程能引发可以唤醒该进程集合中的其他进程的事件,这样,所有的进程都会无限期的等待下去。
2022-01-11 17:21:58
1962
原创 Linux进程间通信 之 管道通信 及 代码示例 [Linux高并发服务器开发]
进程是一个独立的资源分配单元,不同进程(通常指用户进程)之间的资源是独立的,没有关联,不能在一个进程中直接访问另一个进程的资源。 但是进程不是孤立的,不同的进程之间需要进行信息的交互和状态的传递等,因此需要进程间通信。
2022-01-09 16:01:41
4091
1
原创 调用 wait、waitpid 函数进行子进程回收,防止产生僵尸进程 [Linux高并发服务器开发]
父进程可以通过调用wait 或 waitpid得到子进程的退出状态,同时彻底清除掉子进程的资源。
2022-01-05 23:56:32
1914
原创 Linux中的进程控制:进程退出、孤儿进程、僵尸进程 概念及代码示例 [Linux高并发服务器开发]
父进程运行结束,但子进程还在运行(未运行结束),这样的子进程就 称为 孤儿进程。进程终止时,父进程尚未回收子进程PCB资源,子进程残留资源(PCB)存放于内核中,变成僵尸(Zombie)进程。
2021-12-29 00:18:01
698
1
原创 生活中的一点点激励
[ 记录生活中的一点点,持续更新.... ]2021.12.28 每天出地铁,需要爬一个四层的很高的台阶。之前,从下面抬头往上一看,这么高,得爬多久啊!这爬起来不得累死人。(心中产生退却之意,要不然明天去另一个有扶梯的出口)今天,就不往上看,低头一个一个台阶的爬,也不会觉得累,觉得难了。感觉 生活 就是这样,当你专注于当下,一步一步地完成一个一个小规划,就不会觉得前面好远,好难。反而,会觉得不断地充满力量和希望。...
2021-12-28 11:03:29
388
原创 Linux中 进程创建 相关的execve函数调用[Linux高并发服务器开发]
exec函数族是与创建进程相关,都是通过封装Linux系统函数execve来实现的。exec函数族的作用是 根据指定的文件名找到可执行文件,并用它来取代调用进程的内容。
2021-12-27 23:07:53
1363
原创 Linux中的 进程概念、进程创建 和 GDB多进程调试 [Linux高并发服务器开发]
进程是正在运行的程序的实例,是一个具有一定独立功能的程序关于某个数据结合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
2021-12-26 16:05:26
1184
原创 C++中的Lambda表达式
一个lambda表达式表示一个可调用的代码单元,可理解为一个未命名的内联函数。一个lambda表达式具有一个返回类型、一个参数列表和一个函数体 [capture list ] ( ...
2021-12-02 18:28:12
3669
原创 Linux下 UDP 服务端和客户端回声实现
Udp是传输层的协议,它的主要作用是:将从网络中收到的数据,分配给具体的套接字的端口。server端:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<arpa/inet.h>#include<sys/socket.h>#include<sys/types.h>#define BUF_S
2021-11-29 23:34:28
1869
原创 同步阻塞IO 和 IO多路复用
RPC 是解决进程间通信的一种方式。一次 RPC 调用,本质就是 服务 消费者 与 服务 提供者间的一次网络信息交换的过程。说到网络通信,就要提到网络 IO 模型。为什么要讲网络 IO 模型呢?因为 所谓的两台 PC 机之间的网络通信,实际上就是两台 PC 机对网络 IO 的操作。 最常用的两种网络IO模型是 同步阻塞IO 和 IO多路复用。 分别用两个比喻来说明这两种IO模型的区别: 同步阻塞IO:我们去餐厅吃饭,我们到达餐厅,向服务员点餐,之后要一...
2021-11-25 00:24:33
1595
2
原创 Makefile 运行机制 和 语法
一、make的运行最简单的就是直接在命令行下输入 make 命令, make 命令会找当前目录的makefile 来执行,一切都是自动的。但也有时你也许只想让 make 重编译某些文件,而不是整个工程,而又有的时候你有几套编译规则,你想在不同的时候使用不同的编译规则,等等。38.make的退出码make 命令执行后有三个退出码:0 —— 表示成功执行。1 —— 如果 make 运行时出现任何错误,其返回 1。2 —— 如果你使用了 make 的“-q”选项,并且
2021-11-21 17:52:30
3820
原创 GDB调试 [Linux高并发服务器开发]
目录一、什么是GDB二、GDB调试的必要条件三、GDB命令1.启动和 退出GDB调试工具2.给程序设置参数/获取设置参数3.GDB 使用帮助4.查看 当前文件的源代码5.查看非当前文件代码6.设置显示的代码行数7.设置断点8.查看所有的断点9.删除断点10.设置断点无效11.设置断点生效12.设置条件断点(一般用在循环的位置)13.运行GDB程序14.继续运行,到下一个断点停15.向下执行一行代码( 不会进入函数体,逐语句执行)..
2021-11-21 17:47:07
1062
原创 Xshell 和 VMware中的Ubuntu虚拟机连接失败
遇到连接失败的情况,一般从两方面着手:一、查看Xshell中的 主机 ip地址是否配置正确在Ubuntu中,输入ifconfig命令,查看虚拟机的 IP地址,inet 10.135.17.51 ,IPV4地址就是 10.135.17.51 。 在Xshell中配置的时候,默认的SSH连接端口是 22.然后,设置登陆服务器的用户名和密码,点击连接。二、服务器中安装 SSH服务如果完成以上设置,发现还没有连接成功。那么Ubuntu服务器上,没...
2021-11-21 14:35:33
1217
原创 Linux中动态库的制作 和 使用[Linux高并发服务器开发]
兄弟 篇:Linux中静态库的制作 和 使用动态库的工作原理是:程序启动之后,动态库会被加载到内存中供程序使用。 动态库的代码不会被打包到可执行程序中。一、命名规则在Linux中:libxxx.solib:前缀 ,是固定的xxx:库的名字,自己起名.so:后缀,是固定的在windows中:libxxx.dll二、动态库的制作2.1 动态库的制作流程,如图:2.2分两个步骤:1.获取目标文件,使用 gcc...
2021-11-19 00:30:52
671
Toad for DB2 v5.6.0
2018-02-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人