自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 NALU结构学习

H.264标准指出,当数据流是储存在介质上时,在每个NALU 前添加起始码:0x000001 或 0x00000001,⽤来指示⼀个NALU 的起始和终⽌位置: 在这样的机制下,在码流中检测起始码,作为⼀个NALU得起始标识,当检测到下⼀个起始 码时,当前NALU结束。其余场合都是4字节0x00000001的。,占2个bit nal_ref_idc.:取00~11,似乎指示这个NALU的重要性,如00的NALU解码器可以丢弃它⽽不 影响图像的回放,0~3,取值越⼤,表示当前NAL越重要,需要优先受到保护。

2024-03-09 15:23:13 395

原创 AAC ADTS格式

aac

2024-03-05 18:12:53 807

原创 c++对接CAT1400

最近应工作需要研究CAT1400协议对接,记录下使用c/c++对接流程

2023-11-08 10:08:52 205

原创 内核编译bpf

缺少 bison库。缺少clang编译器。

2023-08-19 17:36:00 255

原创 openresty学习笔记

openresty 是一个基于 nginx 与 lua 的高性能 web 平台,其内部 集成了大量精良的 lua 库、第三方模块以及大数的依赖项。用于 方便搭建能够处理超高并发、扩展性极高的动态 web 应用、 web 服务和动态网关。openresty 通过汇聚各种设计精良的 nginx 模块,从而将 nginx 有效地变成一个强大的通用 Web 应用平台。

2023-02-26 10:28:59 921 1

原创 googletest 笔记

1 测试应该是独立的和可重复的。调试一个由于其他测试而成功或失败的测试是一件痛苦的事情。googletest 通过在不同的对象上运行测试来隔离测试。当测试失败时,googletest 允许您单独运行它以快速调试。2 测试应该很好地“组织”,并反映出测试代码的结构。googletest将相关测试分组到可以共享数据和子例程的测试套件中。这种通用模式很容易识别,并使测试易于维护。当人们切换项目并开始在新的代码库上工作时,这种一致性尤其有用。3 测试应该是可移植的和可重用的。

2023-02-21 09:59:53 413

原创 Kubernetes 基本概念

Kubernetes 是一个可移植、可扩展的开源平台。用于管理容器化的工作负载和服务,可促进声明式配 置和自动化。是谷歌保密了十几年的秘密武器Borg的开源版本,谷歌一直通过Borg系统管理着数量庞大 的应用程序集群。由于Kubernetes是基于容器技术的分布式架构方案,所以不局限于任何编程语言。Kubernetes是一个可插拔的开放式平台,那些默认的解决方案可都是可选的。Kubernetes为构建开发 人员平台提供了基础,但是在重要的地方保留了用户的选择权,拥有更高的灵活性。

2023-01-18 17:27:27 1112

原创 Docker Swarm

Docker Swarm 是Docker官方的跨节点的容器编排工具。用户只需要在单一的管理节点上操作,即可管理集群下的所有节点和容器。

2023-01-17 18:43:55 902

原创 Docker-Compose

Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用。Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。其代码目前在 https://github.com/docker/compose 上开源。

2023-01-17 17:47:49 806

原创 Docker 容器监控

源码:https://github.com/google/cadvisor源码:https://github.com/prometheus/node_exporter官方文档:https://prometheus.io/ PromQL文档:https://prometheus.io/docs/prometheus/latest/querying/basics/源码:https://github.com/prometheus/prometheus。

2023-01-17 14:39:21 1267 1

原创 Docker 网络

在一台未经特殊网络配置的Ubuntu机器上安装完Docker之后,在宿主机上通过ifconfig命令可以看到多 了一块名为docker0的网卡。该网卡即是docker0网桥,网桥在这里的作用相当于交换机,为连接在其上 的设备转发数据帧。网桥上的veth网卡设备相当于交换机上的端口,可以将多个容器或虚拟机连接其 上,这些端口工作在二层,所以是不需要配置IP信息的。

2023-01-17 10:31:06 2243

原创 Docker数据卷

Docker的镜像是有一系列的只读层组合而来,当启动一个容器时,Docker加载镜像的所有只读层,并在最上层加入一个读写层。这个设计使得Docker可以提高镜像构建、存储和分发的效率,节省了时间和存储空间,然而也存在一些问题:为了解决这些问题,Docker引入了数据卷(volume)机制。Volume 是存在于一个或多个容器中的特定文件或文件夹,这个目录以独立于联合文件系统的形式在宿主机中存在,并为数据的共享和持久化提供便利。Docker run 和 docker create 通

2023-01-16 17:54:38 664

原创 dockerfile笔记

Dockerfile是一个创建镜像所有命令的文本文件, 包含了一条条指令和说明, 每条指令构建一层, 通过 docker build命令,根据Dockerfile的内容构建镜像,因此每一条指令的内容, 就是描述该层如何构建.有了 Dockefile, 就可以制定自己的docker镜像规则,只需要在Dockerfile上添加或者修改指令, 就可生成 docker 镜像.

2023-01-15 21:13:56 999

原创 Docker镜像

容器解决应用开发、测试和部署的问题,而镜像解决应用部署环境问题。镜像是一个只读的容器模板, 打包了应用程序和应用程序所依赖的文件系统以及启动容器的配置文件,是启动容器的基础。镜像所打包的文件内容就是容器的系统运行环境——rootfs(根文件系统或根目录)。容器与镜像类似对象与类的关系。

2023-01-15 17:38:28 1455

原创 docker 命令

docker 命令官方文档Reference documentation | Docker Documentationdocker events : 从服务器获取实时事件docker logs : 获取容器的日志docker history : 查看指定镜像的创建历史。docker run --rm -dit --cpu-period=50000 --cpu-quota=25000 ubuntu /bin/bashdocker run --rm -dit --cpu-rt-period=50000 --cp

2022-12-03 22:26:45 962

原创 Docker介绍

根据官方的定义,Docker是以Docker容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员设计的,用于构建、发布和运行分布式应用的平台。 引用网图:docker是容器化技术,针对的是应用及应用所依赖的环境做容器化。遵循单一原则,一个容器只运行一 个主进程。多个进程都部署在一个容器中,弊端很多。比如更新某个进程的镜像时,其他进程也会被迫 重启,如果一个进程出问题导致容器挂了,所有进程都将无法访问。再根据官网的提倡的原则而言,容器 = 应用 + 依赖的执行环境而不是像虚拟机一样,把

2022-12-03 19:35:47 1838

原创 Docker环境搭建

1. 安装sudo apt install docker.io2. 卸载1. 官方文档:https://docs.docker.com/engine/install/ubuntu/2. 有三种安装方式:1. 基于官方存储库安装;2. 下载软件包安装;3. 基于官方给出的快捷脚本安装。1. 更新 apt 包索引,并且安装一些软件使得apt可以通过HTTPS协议访问软件库。2. 添加docker官方的GPG 秘钥3. 设置一个标准的docker软件仓库。4. 更新apt 包索引并查看docke

2022-12-03 17:29:58 314

原创 GRPC远程调用

RPC 即远程过程调用协议(Remote Procedure Call Protocol),可以让我们像调用本地对象一样发起远程调用。RPC 凭借其强大的治理功能,成为解决分布式系统通信问题的一大利器。gRPC是一个现代的、高性能、开源的和语言无关的通用 RPC 框架,基于 HTTP2 协议设计,序列化使用PB(Protocol Buffer),PB 是一种语言无关的高性能序列化框架,基于 HTTP2+PB 保证了的高性能。

2022-11-30 16:51:42 1883

原创 Protobuf3语法笔记

先来看一个非常简单的例子。假设你想定义一个“搜索请求”的消息格式,每一个请求含有一个查询字符串、你感兴趣的查询结果 所在的页数,以及每一页多少条查询结果。可以采用如下的方式来定义消息类型的.proto文件了}文件的第一行指定了你正在使用proto3语法:如果你没有指定这个,编译器会使用proto2。这个指定语法行必须是文件的非空非注释的第一个行。SearchRequest消息格式有3个字段,在消息中承载的数据分别对应于每一个字段。其中每个字段都有一个名字和一种类型。

2022-11-29 21:00:46 418

原创 Protobuf应用层协议设计

什么协议:协议是⼀种约定,通过约定,不同的进程可以对⼀段数据产⽣相同的理解,从⽽可以相互协作,存在进程间通信的程序就⼀定需要协议。为什么说进程间通信就需要协议?⽽不是说客户端和服务器端之前?为什么需要⾃⼰设计协议?⽐如不同表的插头,还需要进⾏各种转换,如果我们两端进⾏通信没有约定好协议,那彼此是不知道对⽅发送的数据是什么意义。

2022-11-29 19:48:00 1226

原创 KafKa存储机制

Kafka 是为了解决大数据的实时日志流而生的, 每天要处理的日志量级在千亿规模。1. 数据实时产生2. 海量数据存储与处理所以它必然要面临分布式系统遇到的高并发、高可用、高性能等三高问题。对于 Kafka 的存储需要保证以下几点:1. 存储的主要是消息流(可以是简单的文本格式也可以是其他格式,对于 Broker 存储来说,它并不关心数据本身)2. 要支持海量数据的高效存储、高持久化(保证重启后数据不丢失)3. 要支持海量数据的高效检索(消费的时候可以通过offset或者时间戳高效查询并处理)

2022-11-28 20:37:31 3952

原创 KafKa C++实战

1. Kafka架构是由producer(消息生产者)、consumer(消息消费者)、borker(kafka集群的 server,负责处理消息读、写请求,存储消息,在kafka cluster这一层这里,其实里面是有很多个 broker)、topic(消息队列/分类相当于队列,里面有生产者和消费者模型)、zookeeper 这些部分 组成。

2022-11-28 10:47:57 5530

原创 kafka使用场景与设计原理

Kafka 本质上是一个 MQ(Message Queue),使用消息队列的好处?解耦:允许我们独立的扩展或修改队列两边的处理过程。可恢复性:即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。缓冲:有助于解决生产消息和消费消息的处理速度不一致的情况。灵活性&峰值处理能力:不会因为突发的超负荷的请求而完全崩溃,消息队列能够使关键组件顶住突发的访问压力。异步通信:消息队列允许用户把消息放入队列但不立即处理它。

2022-11-27 15:57:04 875

原创 GRPC C++开发环境搭建

必须在 grpc 执行 git submodule update --init 命令之后生成的。如果cmake低于3.15, gcc/g++ 低于 7.0 ,请根据文档进行安装。查看此时grpc目录内容的大小du -h --max-depth=1, 可以看到。升级gcc和gdb的版本,至少需要6.3以上的版本。,下载完后会发现整个grpc目录内容明显变大=注: 文件路径是可以指定的, 一般选择在。里面编译安装对应的 protobuf。编译helloworld。再次查看 目录大小,

2022-11-27 09:37:08 756

原创 死锁检测组件

死锁,是指多个线程或者进程在运行过程中因争夺资源而造成的一种僵局,当进程或者线程处于这种僵持状态,若无外力作用,它们将无法再向前推进。如下图所示,线程 A 想获取线程 B 的锁,线程 B 想获取线程 C 的锁,线程 C 想获取线程 D 的锁,线程 D 想获取线程 A 的 锁,从而构建了一个资源获取环。死锁的存在是因为有资源获取环的存在,所以只要能检测出资源获取环,就等同于检测出 死锁的存在。

2022-11-26 22:47:24 132

原创 kafka开发环境搭建

登陆网址https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载完成后,Linux默认下载位置在当前目录下的Download或下载文件夹下,通过命令cd ~/Downloads或cd ~/下载即可查看到对应的文件。

2022-11-22 18:27:08 1112

原创 Nginx入门笔记

代理通常用于在多个服务器之间分配负载,无缝地显示来自不同网站的内容,或者通过 HTTP 以外的协议将请求传递给应用服务器。压缩响应通常会显着减少传输数据的大小。然而,由于压缩在运行时发生,它还可以增加 相当大的处理开销,这会对性能产生负面影响 在向客户端发送响应之前,NGINX 会执行压 缩,但不会“压缩”已压缩的响应(例如,由代理的服务器)。当启用缓存时,NGINX 将响应保存在磁盘缓存中,并使用它们来响应客户端,而不必每次都为同一内容代理请求。

2022-11-19 22:01:52 1672

原创 mysql连接池和redis连接池

定义:数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成 一个连接池,由程序动态地对池中的连接进行申请,使用,释放。大白话:创建数据库连接是一个很耗时的操作,也容易对数据库造成安全隐患。所以,在程序初始化的 时候,集中创建多个数据库连接,并把他们集中管理,供程序使用,可以保证较快的数据库读写速度, 还更加安全可靠。这里讲的数据库,不单只是指Mysql,也同样适用于Redis。

2022-11-06 21:23:58 632

原创 Redis主从同步与对象模型

为什么会涉及到这个问题?因为redis是一个内存数据库,如果此时redis是数据量已经达到了最大值,这时候我们再发送一个写命令去操作redis,此时如何定义我们的行为。这时候就涉及到淘汰策略的问题。

2022-10-31 21:15:21 140

原创 Redis源码分析-存储原理与数据模型

redis源码学习redis是单线程,分治 , 内存wsl2安装安装 WSL | Microsoft Docsvscode开始通过 WSL 使用 VS Code | Microsoft Docsc/c++基本配置Get Started with C++ and Windows Subsystem for Linux in Visual Studio Code建议学习方法1. 首先定一个小的主题,预期要得到的效果;2. 准备测试数据以及调试环境;3. 查看流程,把.

2022-10-28 15:44:23 745

原创 协程学习笔记

ntyco协程学习

2022-10-15 20:43:10 192

原创 统一事件源

一种典型的解决方案是:把信号的主要处理逻辑放到程序的主循环中,当信号处理函数被触发时,它只是简单地通过通知主程序接受到的信号,并把信号传递给主循环,主循环再根据接收到的信号值执行目标信号对应的逻辑代码。这里的解决方案是,信号处理函数仅仅发送信号通知程序主循环,将信号对应的处理逻辑放在程序主循环中,由主循环执行信号对应的逻辑代码。一般的信号处理函数需要处理该信号对应的逻辑,当该逻辑比较复杂时,信号处理函数执行时间过长,会导致信号屏蔽太久。是的,但定时事件是非必须立即处理的事件,可以允许这样的情况发生。

2022-09-22 09:36:49 101

原创 C++11 function、bind、可变参数模板

在设计回调函数的时候,无可避免地会接触到可回调对象。在C++11中,提供了std::function和 std::bind两个方法来对可回调对象进行统一和封装。C++语言中有几种可调用对象:函数、函数指针、lambda表达式、bind创建的对象以及重载了函数调用 运算符的类。和其他对象一样,可调用对象也有类型。例如,每个lambda有它自己唯一的(未命名)类类型;函数及函数指针的类型则由其返回值类型和实参类型决定。

2022-09-15 09:25:41 1627

原创 C++11 条件变量

互斥量是多线程间同时访问某一共享变量时,保证变量可被安全访问的手段。但单靠互斥量无法实现线 程的同步。线程同步是指线程间需要按照预定的先后次序顺序进行的行为。C++11对这种行为也提供了 有力的支持,这就是条件变量。条件变量位于头文件condition_variable下。条件变量使用过程:1. 拥有条件变量的线程获取互斥量;2. 循环检查某个条件,如果条件不满足则阻塞直到条件满足;如果条件满足则向下执行;

2022-09-14 16:48:59 1760

转载 IO_uring

iouring

2022-09-06 22:07:48 350

原创 定时器方案,红黑树,时间轮

定时器、时间轮

2022-09-02 21:48:31 280

原创 守护进程笔记

守护进程编写规则 (1)调用umask(0); umask是个函数,用来限制(屏蔽)一些文件权限的。 (2)fork()一个子进程(脱离终端)出来,然后父进程退出( 把终端空出来,不让终端卡住);固定套路 fork()的目的是想成功调用setsid()来建立新会话,目的是 子进程有单独的sid;而且子进程也成为了一个新进程组的组长进程;同时,子进程不关联任何终端了;#include <stdio.h>#include <s...

2022-01-22 20:59:59 94

原创 内核:进程与调度机制(笔记)

一、调度器1、核心调度器调度器的实现基于两个函数:周期性调度器函数和主调度器函数。这些函 数根据现有进程的优先级分配CPU时间。这也是为什么整个方法称之为优先 调度的原因。a.周期性调度器函数周期性调度器在scheduler_tick中实现,如果系统正在活动中,内核会按 照频率HZ自动调用该函数。该函数主要有两个任务如下:(1) 更新相关统计量:管理内核中与整个系统和各个进程的调度相关的 统计量。其间执行的主要操作是对各种计数器加1。(2) 激活负责当前进程的调度类的周期性调度方法。

2022-01-09 15:59:33 594

原创 内核:linux进程原理

一、进程原理1、进程 Linux内核把进程称为任务(task),进程的虚拟地址空间分为用户虚 拟地址空间和内核虚拟地址空间,所有进程共享内核虚拟地址空间,每个 进程有独立的用户空间虚拟地址空间。 进程有两种特殊形式:没有用户虚拟地址空间的进程称为内核线程, 共享用户虚拟地址空间的进程称为用户线程。通用在不会引起混淆的情况下把用户线程简称为线程。共享同一个用户虚拟地址空间的所有用户线程组成一个线程组。2、Linux进程四要素:a.有一段程序供其执行。b.有进程专用的系...

2022-01-08 19:25:28 1126

原创 Redis协议与异步方式

redis网络层eactor并发处理连接,线程串行处理命令;单reactor,一个线程同时处理命令+网路IO (mysql则是一个连接一个线程处理)redis pipeline redis pipeline 是一个客户端提供的,而不是服务端提供的;pipeline就是多个请求依次发送出去,然后依次接收回包对于request操作,只是将数据写到fd对应的写缓冲区,时间非常快,真正耗时操作在读取 response;send这是将数据写到写缓冲区,真正的发送...

2021-12-05 14:58:56 1413

空空如也

空空如也

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

TA关注的人

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