- 博客(144)
- 收藏
- 关注
原创 线程池原理与实现
本文介绍了线程池的工作原理及其实现方式。线程池通过预先创建并管理一组工作线程,实现任务的高效处理,避免了频繁创建和销毁线程的开销。文章采用银行柜台服务的类比,解释了线程池的运作机制:用户线程(客户)提交任务(业务)到任务队列(取号机),工作线程(柜员)从队列获取任务执行。核心数据结构包括任务描述结构体和线程池控制结构体,分别对应"做什么"和"如何管理"两个方面。线程池工作流程遵循生产者-消费者模型,通过条件变量实现任务调度和线程休眠/唤醒。这种设计显著提升了系统性能,特别适用于高并发场景。
2026-07-10 16:49:04
240
原创 环形队列设计——基于共享内存的高效进程间通信
* 队列头部:记录元信息和同步状态 */int rd_idx;/* 读索引(下一个要读取的 block 编号) */int wr_idx;/* 写索引(下一个要写入的 block 编号) *//* 环形队列中 block 的总数 *//* 每个 block 的字节大小 *//* 信号量集合 ID,用于同步互斥 *//* 环形队列句柄:连接头部和数据区 *//* 指向共享内存中头部区域的指针 *//* 指向数据存储区的指针(紧跟在 header 之后) */
2026-07-10 15:28:08
251
原创 I/O 多路复用完全指南 —— select、poll、epoll
I/O多路复用技术对比指南 本文系统介绍了三种I/O多路复用技术:select、poll和epoll。传统I/O处理方案存在资源浪费问题(多线程模型)或CPU空转问题(轮询模型),而I/O多路复用通过内核监控多个文件描述符,实现高效事件通知机制。 三种技术核心差异: select:使用1024位的fd_set位图结构,每次全量扫描,存在描述符数量限制 poll:改进select的位图限制,采用pollfd数组,但仍需线性扫描 epoll:采用红黑树+就绪链表+回调机制,时间复杂度O(1),性能最优 应用建议
2026-07-10 14:43:31
337
原创 进程 vs 线程:全面对比分析
进程与线程:核心差异与应用场景分析 摘要 本文通过形象类比(公司大楼vs员工)和架构图解,系统对比了进程与线程的关键特性。进程作为资源分配单位,具有独立地址空间、高隔离性但创建和切换开销大(10-100μs);线程作为CPU调度单位,共享进程资源,创建和切换更快(1-10μs)。重点解析了二者在内存管理、通信机制(IPC vs全局变量)、容错性(线程崩溃影响整个进程)及适用场景的差异。通过流程图展示了fork()与pthread_create()的底层实现差异,指出线程复用地址空间的性能优势。结论强调:需隔
2026-07-10 13:38:56
347
原创 Linux 多线程编程——总结
这篇文章总结了Linux多线程编程的核心概念和操作命令。主要内容包括: 线程的基本概念:线程是进程内部的执行单元,共享进程资源但拥有独立栈空间,类比公司大楼里的员工协作场景。 进程与线程的对比:从地址空间、创建开销、切换速度、通信方式等多个维度进行比较,突出线程轻量级和高效的特点。 线程共享与独立资源:通过公司大楼的类比,形象说明线程共享代码段、数据段等资源,但各自拥有独立的栈空间和寄存器值。 线程监控命令:介绍了pidstat、top和ps三个实用命令,用于查看和监控线程运行状态,类比工厂巡查员的工作方式
2026-07-10 10:56:58
301
原创 Linux 进程间通讯(IPC)——总结
本文介绍了Linux进程间通信(IPC)的基本概念和主要机制,重点讲解了无名管道的原理和应用。 主要内容包括: IPC的必要性:由于进程地址空间隔离,进程间需要特殊机制进行通信 IPC机制全景: 管道(无名/有名) 信号 System V IPC(消息队列/共享内存/信号量) 无名管道核心特性: 单向通信,仅限父子进程 通过文件描述符操作 读写阻塞特性 原子性保证 经典应用场景演示:模拟shell命令"ls | sort -r" 文章通过类比日常生活场景(如传话筒、公共信箱等)帮助理解各种IPC机制的特点,
2026-07-09 17:13:50
387
原创 Linux 进程管理——总结
文章摘要 Linux进程管理笔记精要: 进程本质:程序的一次动态执行过程,是资源分配的最小单位(区别于线程的CPU调度单位)。类比程序为菜谱,进程即炒菜过程,PID唯一标识进程。 地址空间:32位系统为每个进程分配4GB虚拟地址空间(3G用户空间+1G内核空间),通过MMU硬件映射物理内存,实现内存隔离与安全访问。 进程状态:核心五状态转换模型(就绪、运行、可中断/不可中断睡眠、停止、僵尸态),通过状态机动态管理。僵尸态需父进程wait回收资源,避免内存泄漏。 结构特性:采用树形管理(init为根进程),支
2026-07-09 15:04:45
339
原创 cursor注册国内手机号全过程
国内的需要改成 +86 再输手机号,例如我的185 1xxx xxxx。默认的是:+1位北美地区号码归属地。
2026-03-05 13:57:24
8142
1
原创 NVIDIA Jetson设备刷写利器:l4t_initrd_flash.sh参数解析
掌握l4t_initrd_flash.sh的深入用法,能够显著提升Jetson设备部署效率,特别是在大规模生产环境和定制化存储方案中。该脚本的模块化设计(生成与刷写分离)和网络刷写支持,使其成为工业级应用的首选工具。建议结合具体硬件型号和JetPack版本,通过小规模测试验证后再部署到生产环境。
2025-07-14 11:19:31
1662
原创 异步I/O库:libuv、libev、libevent与libeio
• 追求开发效率与跨平台:libuv是现代化工程的标杆,尤其适合全栈JavaScript开发者。• 榨取Unix性能极限:libev+libeio仍是C语言老手的利器。• 历史与兼容性优先:libevent提供“一站式”传统解决方案。在异步I/O的世界里,库的选择决定了应用的天花板。理解其内核差异,方能写出既高性能又可持续维护的代码。
2025-07-10 18:00:57
1539
原创 fatal error: filesystem: No such file or directory
编译过程中出现 filesystem: No such file or directory 问题。
2025-06-23 17:48:25
368
原创 Ubuntu VMware虚拟机卡在/dev/sda1
虚拟机重启后,出现故障,一直卡在如下图所示地方,偶尔重启后,可以多显示一点:无法进入命令行。
2025-06-13 14:45:24
544
原创 NANO 最新 tegra 32.7.6 资源包安装记录
是NVIDIA Jetson开发工具包中的一个关键脚本,主要作用是将预编译的二进制文件(如内核模块、固件、库文件等)部署到解压后的根文件系统中。部分板卡需要修改tegra210-p3448-0002-p3449-0000-b00.dtb。该脚本通常在解压根文件系统后执行,是完成Jetson系统烧录前的必要步骤。
2025-06-10 14:21:20
433
原创 关于TFLOPS、GFLOPS、TOPS
在人工智能与高性能计算飞速发展的今天,“GFLOPS”“TOPs”“TFLOPS” 这些术语频繁出现在芯片参数、设备评测中。例如NANO官方的技术规格。它们如同衡量计算能力的 “度量衡”,是判断硬件性能的关键指标。那么,这些神秘的缩写究竟代表着什么?它们之间又存在怎样的联系与差异?
2025-06-09 16:58:50
1934
原创 系统调试——ADB 工具
ADB(Android Debug Bridge) 是 Android SDK 里的一个工具, 用这个工具可以操作管理Android 模拟器或真实的 Android 设备。ADB 是一个“客户端-服务器端” 程序, 其中客户端主要是指 PC, 服务器端是 Android 设备的实体机器或者虚拟机。
2025-06-04 15:03:25
1208
原创 新制作文件系统占满:Error writing to file - write (28: No space left on device)
新制作的文件系统刷机后,发现系统占满。
2025-06-04 14:23:08
559
原创 NANO 2025年新批次板卡SD卡问题
正常启动过程(我这里安装了WK驱动和ads 驱动,未安装设备没有):异常过程:SD卡初始化报错,或无法识别SD卡。
2025-06-03 15:33:19
1345
原创 18.04 update 报错:(appstreamcli:2822): GLib-ERROR
【代码】18.04 update 报错:(appstreamcli:2822): GLib-ERROR。
2025-06-03 11:16:46
477
原创 Windows 使用 WSL 安装 Ubuntu
Windows 上轻松跑 Linux 又不想用笨重的VMware 和VirtualBox,怎么办?开源项目。它解决了许多开发者在 Windows 和 Linux 间切换的痛点,实现在 Windows 上无缝跑 Linux 工具和命令。,简称 WSL,是一个能直接在 Windows 上运行 Linux 命令行工具、编译代码,甚至运行 GUI 应用的神器。不需要虚拟机,也不用重启电脑。GitHub 上已经吸引了,足见业界关注度和热度。主体用开发,同时包含等语言协作开发。
2025-05-23 10:21:20
1931
原创 Ubuntu 20.04 安装 ROS 2 Foxy Fitzroy
应该看到talker说它正在Publishing消息,listener说I heard这些消息。如果你在一个最小的环境中(比如docker容器),语言环境可能是最小的,比如POSIX。始终建议您在安装新软件包之前确保您的系统是最新的。如果安装ros-foxy-desktop,可以尝试一些例子。但是,如果你使用不同的UTF-8支持的语言环境,应该没问题。需要将ROS 2 apt存储库添加到系统中。添加带有apt的ROS 2 GPG密钥。确保你有一个支持UTF-8的语言环境。
2025-04-29 17:16:40
2534
原创 安装Second Me
Second Me我的损失:随着人工智能获得力量,我们失去了意义我们真正相信什么?像许多人一样,我们看到了通用人工智能(AGI)的巨大潜力。然而,有一个缺口——一个“缺失的部分”——让我们感到不安。担忧是真实的:随着通常被称为“上帝模型”的AGI的出现,我们有可能失去自己的身份,沦为超级智能力量控制下的棋子。随着人工智能的进步,我们的个性面临风险:•我们的数据掌握在企业手中,为科技巨头训练人工智能,而不是我们自己•我们的经验和见解失去了相关性,取而代之的是标准化的人工智能反应•。
2025-04-24 10:30:20
1525
原创 VMware无法检测到USB设备
正常使用的VMware虚拟机,可能跟前段时间关闭系统启动项相关,现在虚拟机插拔USB设备都无法检测到,插拔设备没有任何的反应和提示。windows 可以正常识别,插拔USB,VMware虚拟机无任何反应。
2024-12-31 10:39:58
2252
原创 C++ ——命名空间namespace
一般情况下,如果c++中出现两个变量、函数名、类名完全相同时,就会产生冲突。解决命名冲突的办法传统的做法是重新使用不同的标识符。但又是这样做有时反而降低程序的可读性,因此c++提供了第二种解决命名冲突的方法——命名空间。将这些名字相同的变量、函数和类定义在不同的命名空间中,问题就解决了。需要注意的是,同一个命名空间中标识符须是唯一的。例如:XX和YY都定义了一个全局变量 fp,用来指明当前打开的文件,将他们的代码整合在一起编译时,编译器会提示 fp 重复定义( Redefinition)错误。
2024-12-26 14:25:19
522
原创 spdlog 关于 std::make_shared<spdlog::sinks::rotating_file_sink_mt> 使用详情
关于:std::make_shared<spdlog::sinks::rotating_file_sink_mt> 第一参数大多数例子,包括头文件中给的都是 "logs/log.txt" 字符串样式代码中使用 string 还是 转成 char * 使用?
2024-12-23 18:07:33
638
原创 ubuntu 格式化磁盘为ext4、fat、ntfs 等
1、兼容性:FAT是计算机系统中最古老的文件系统,它的兼容性最好,几乎所有的操作系统都能支持它。3、文件名:FAT只能支持短文件名,文件名长度最多只能8个字符,而VFAT则支持长文件名,文件名长度可以达到255个字符。5、管理性:FAT具有较好的管理性,它能够自动进行文件碎片整理,而VFAT则不具有这一特性,文件碎片整理需要用户手动完成。其中,`/dev/sdXn` 是要格式化的分区路径,`<文件系统类型>` 是要使用的文件系统类型。下列参数,版本系统不同,可能有所差异(慎用不清楚的参数,常用为-t)。
2024-12-04 14:36:09
4456
原创 nginx 服务搭建
Nginx 是一个非常轻量级的HTTP服务器,Nginx,它的发音为“engine X”, 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。
2024-12-03 11:43:33
650
原创 解决 VMware ubuntu--vg-ubuntu--lv 磁盘空间不足的问题
VMware 安装 Ubuntu Server查看文件系统磁盘空间的使用情况可以发现 /dev/mapper/ubuntu–vg-ubuntu–lv 虚拟机根目录空间几乎占满。查看磁盘信息,还有很多查看LVM卷组的信息使用命令进行磁盘扩容。
2024-11-27 10:55:04
670
原创 ARM板 海康威视SDK使用
3,将 HCNetSDKV6.1.9.45_build20220902_ArmLinux64_ZH_20240802154010 中库 全部拷贝到 consoleDemo/linux64/lib 同理拷贝到psdatacall_demo相应目录;设备网络SDK_Linux64 V6.1.9.48_build20230410 与 设备网络SDK_ArmLinux64 V6.1.9.45_build20。问题:直接编译,可能缺少库,可以通过export 或者拷贝到/usr/lib 下解决。
2024-11-21 16:00:39
3519
4
原创 ubuntu Error! The directory /var/lib/dkms/asg_xdroid/2.0/source does not appear 等错误处理
尝试通过更换内核方式解决,更换成低版本linux-headers-6.8.0-31-generic 后问题依旧。
2024-11-01 10:55:43
919
2
原创 程序运行缺库,但本地已安装
原因分析:在编译的时候已经指定了库的路径,程序编译完成在运行可执行文件时,提示错误:找不到libssl.so.3(在默认路径/lib、/usr/lib)说明编译程序时加入的库路径,并不是意味着把路径参数也编译进去后,可以直接运行可执行文件,事实是执行程序时仍需要指定库的路径(可以采用静态编译(libxxx.a),这样可以直接执行)。
2024-10-21 16:32:28
679
原创 paho.mqtt.c 及 paho.mqtt.cpp编译问题记录
原因分析:ssl 环境问题,但在其他设备中编译均可正常编译所有库,NANO 中需显示调用。问题 无法编译出 libpaho-mqtt3as.so 等库。ubuntu 直接安装openssl。注意:前提是已经安装过ssh。
2024-10-21 14:13:36
674
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅