- 博客(146)
- 收藏
- 关注
原创 dpdk example
摘要:DPDK运行helloworld程序的关键参数解析:-l指定CPU核心使用范围,-n设置内存通道数,--file-prefix避免多进程冲突。运行日志显示成功检测到2个CPU核心和1个NUMA节点,程序在指定核心上打印"hello"消息。源码使用VFIO驱动实现,包含多进程通信socket创建等初始化过程。这表明DPDK环境配置正确,基础功能运行正常。
2025-09-05 14:10:08
373
原创 dpdk 环境搭建
本文介绍了在Ubuntu 22.04.1环境下配置和编译DPDK 22.11.9的过程。主要内容包括:VMware虚拟机中添加多队列网卡设置;新旧版本DPDK的编译方法对比,新版本使用Meson构建系统;运行时环境配置,如挂载hugetlbfs、设置大页内存等。文档提供了详细的命令行操作和参数说明,并配有相关截图说明关键配置步骤。
2025-09-05 09:26:19
325
原创 shell脚本--变量及特殊变量,算术逻辑运算
变量是存储数据的容器,其类型可分为普通变量、环境变量和局部变量。变量命名需遵循规范,定义方式影响其作用域。动态语言变量类型灵活,静态语言需提前声明。双引号赋值能保留多行格式,不加引号则自动合并为单行。强弱类型区别在于是否允许隐式类型转换。这些特性决定了变量在程序中的使用方式。
2025-06-20 21:51:39
292
原创 shell脚本
脚本语言基础与应用摘要 脚本语言采用解释执行方式,与Java等编译型语言不同,具有快速开发优势。其基本结构包含shebang机制(如#!/bin/bash),用于指定解释器路径。在Linux系统中,可通过"./a.sh | bash"命令执行脚本,或将脚本保存为镜像文件。脚本语言广泛用于自动化任务、系统管理等领域,因其无需编译、修改灵活的特点而受到欢迎。执行方式上,脚本语言是逐行解释运行,而编译型语言需先转换为机器码。
2025-06-19 23:13:38
178
原创 muduo库源码分析: One Loop Per Thread
当该TcpConnection对象注册到SubEventLoop之后,这个TcpConnection对象的任何操作(包括调用用户自定义的连接建立后的处理函数。)都必须要在这个SubEventLoop线程中运行,所以TcpConnection::connectEstablished()函数必须要在SubEventLoop线程中运行。那么我们怎么。
2025-04-12 21:07:33
993
原创 Linux内存管理--fork为例
创建一个新的进程涉及多个步骤,每个结构体和内存区域的分配方式不同,我们详细拆解 fork() 时的内存分配流程,并分析 task_struct、mm_struct、页表、堆栈、物理内存 分别从哪里申请。(进程描述符)用于存储进程的基本信息,如 PID、优先级、状态等。(内存描述符)存储了进程的虚拟地址空间信息,包括堆、栈、代码段等。页表(Page Table)是进程的虚拟地址到物理地址的映射数据结构。用户进程的虚拟地址访问时,Linux 采用按需分配(Demand Paging)策略,物理页的申请流程如下:
2025-03-09 20:12:17
969
1
原创 muduo库源码分析
1. 功能概述:- Channel类主要负责一个文件描述符的事件分发。它与一个文件描述符相关联,并封装了该文件描述符上的 I/O 事件及其对应的回调函数。- 它将底层的 I/O 复用机制(如epoll)与用户的业务逻辑进行解耦,使得用户可以专注于处理特定文件描述符上的事件,而无需关心底层的 I/O 复用细节。2. 工作原理:- Channel在构造时会关联一个文件描述符和一个EventLoop对象。它会在EventLoop中注册对特定事件(如可读、可写、异常等)的关注;
2025-03-04 20:21:05
997
原创 Reactor模式(单/主从)
优缺点优点:逻辑简单,避免业务阻塞I/O缺点:Reactor单线程可能成为I/O瓶颈(每秒处理10万+请求时)线程切换开销大(I/O线程与Worker线程频繁切换)适用场景:中小型系统(如API网关、低频交易系统)
2025-02-19 22:27:57
631
原创 第5章 共享内存范式:C语言层面
编译制导指令以#pragma omp 开始,后边跟具体的功能指令,格式如:#pragma omp 指令[子句[,子句].]。
2025-01-01 20:57:06
309
原创 第3章 并行循环调度的准则
此时total还需要进行同步…首先,让我们来定义一下要考察的类型。在本章中,我们假设每个循环的迭代都与其他循环是相互独立的,也就是说,一个迭代的执行,并不使用前一个迭代的结果。如果我们不认真处理如何,例如如何做循环调度就可能引起比较大的。并且,通常我们不可能提前知道循环迭代的时间,因此,是非常困难的。解决这些问题的方法是本章的重点。
2024-12-27 11:12:04
863
原创 第二章 并行为什么有时会慢?
高速缓存的定义:高速缓存(Cache)是一种小型、快速的内存存储,用于存放最近或最常使用的数据。它位于处理器和主内存(RAM)之间,目的是减少数据访问的延迟,提高数据访问速度。缓存的工作原理:当处理器需要访问内存中的数据时,首先检查高速缓存是否有这个数据(叫做缓存命中)。如果缓存中有这个数据,处理器直接从缓存获取,速度非常快(称为“缓存命中”)。如果缓存中没有该数据(叫做缓存未命中),则处理器从较慢的主内存中读取数据,并把这个数据加载到缓存中,供以后使用(称为“缓存未命中”)。
2024-12-26 21:32:53
1208
原创 第1章 R语言中的并行处理入门
先来总结一下 snow 包的操作:使用了scatter/gather范式:我们同时有多个R的实例在运行,它们可能在集群中的好几个机器上,也有可能在一个多核机器上,我们把其中的一个实例称为manáger,其他的称为worker。
2024-12-26 16:23:55
911
原创 consumer.hpp消费者管理模块
Consumer类封装了一个消费者的基本属性,包括消费者标识、订阅的队列名称、是否自动确认、以及一个回调函数。ptr:定义了一个类型,表示,方便后续使用智能指针管理Consumer对象。:回调函数类型,接收三个参数,分别为消息的标签、消息的基本属性和消息内容,用户可以自定义回调逻辑。构造函数:初始化Consumer对象时设置消费者标识、队列名称、自动确认标志以及回调函数。(消费者调用回调函数,将收到的消息推送给客户端)析构函数:销毁Consumer对象时记录日志,方便调试。
2024-08-16 10:17:21
897
原创 routine.hpp路由匹配模块
Routine类处理了不同类型的消息路由需求,特别是在处理Topic类型的复杂路由规则时,使用了动态规划来高效地完成匹配。
2024-08-16 09:00:00
594
原创 PageCache页缓存
PageCache负责使用系统调用向系统申请页的内存,给CentralCache分配大块儿的内存,以及合并前后页空闲的内存,整体也是一个单例,需要加锁.PageCache桶的下标按照页号进行映射,每个桶里span的页数即为下标大小.
2024-07-06 19:28:42
1842
原创 CentralCache中心缓存
有与ThreadCache相同数量的哈希桶,分别管理一个SpanList,Span,完成后挂到freeList,当ThreadCache对应的桶无内存时,再从对应的。
2024-07-04 18:01:50
821
原创 第八章 基于树的方法
多数投票方法是根据每个自举样本的分类结果进行投票,然后选择票数最多的类别作为最终分类结果。红色类的票数:6 绿色类的票数:4多数投票结果是“Red”
2024-06-23 08:58:02
269
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅