- 博客(59)
- 收藏
- 关注
原创 c++ 中什么是线程池?为什么需要线程池?
吞吐抖动指的是:在负载大致相同的情况下,系统单位时间内处理请求的数量出现明显波动。延迟抖动指的是:同样的请求,完成时间差异非常大。吞吐抖动关注的是“系统整体干活速度稳不稳”,延迟抖动关注的是“单个请求快慢是否可预测”;真正的工程优化目标,是在高吞吐下压低 P99 延迟。shutdown 中必须在持有 mutex 的情况下修改stop_否则会与条件变量的 wait 产生竞态,造成丢失唤醒,线程可能永久阻塞,线程池无法安全退出。如果你愿意,下一步我可以再追一个终极并发题。
2026-02-08 15:43:57
1049
原创 为什么c++中的条件变量的 wait() 函数需要配合while 循环或谓词?
wait()C++ 标准明确允许OS / futex / pthread 的实现细节信号 / 中断 / 调度并发竞争窗口性能与可移植性的设计权衡👉wait()永远必须配合while或谓词把它当成“可能随时醒”的操作futex 的 wait/wake 具体流程pthread_cond 的经典竞态窗口为什么“用原子 + 自旋”有时比 cv 更靠谱写一个100% 必现 bug的 demo你想往哪一层再挖?wait()
2026-02-07 17:19:19
976
原创 解释一下shared_mutex 的用法
读共享、写独占;读多写少才有价值,用前先看比例。是“锁本体(资源)”,是“持有共享锁的 RAII 管理器(工具)”。下面按「角色 / 行为 / 用法」把它们的关系讲清楚。提供“读/写锁能力”,负责“以 RAII 方式持有读锁”。是对的 RAII 封装。是“动作(API)”是“帮你自动做这些动作的对象(RAII)”下面把关系讲透。是“怎么加读锁”,是“帮你安全地持有读锁”。
2026-02-07 16:47:56
887
原创 什么是 std::promise ?常见面试题有哪些?
常见模式:在主线程创建 promise/future,把 promise 传入回调,当 API 完成时在回调内。除去“没有返回值”这一点外,行为(异常传递、broken promise 等)和其他类型完全一致。当你想手动管理任务启动地点(自建线程或回调)、或需将现有异步 API(如回调)包装成。用在“异步任务没有返回值,只需要告诉别人“完成了/失败了”的场景。共享状态只允许写入一次结果(或异常)。绑定一对 promise/future,跨线程传递值。要在线程间传递需使用。,提示 promise 被破坏。
2026-02-07 16:47:38
744
原创 详细解释 atomic_flag 的用法和什么叫自旋锁
自旋锁是一种锁:当线程获取不到锁时,不会睡眠阻塞,而是在 CPU 上不断循环尝试获取锁(“自旋”)。:最轻量的原子标志位,核心操作是clear()自旋锁:拿不到锁就一直循环尝试(忙等),适合“锁持有时间极短”的情况一般场景优先std::mutex,自旋锁是偏底层/性能优化手段,用错会更慢如果你想,我可以在你当前的程序里加一个“对比实验”:用自旋锁保护一个极短临界区 vs 用 mutex,观察在不同 sleep/计算时间下哪个更合适。unlock用release:把临界区内写入“发布出去”lock用。
2026-01-31 17:51:29
996
原创 condition_variable 详细介绍
角色做什么生产者加锁 → 放数据 → 解锁 → 通知消费者消费者加锁 → 等待(有数据或done) → 取数据 → 解锁让消费者在"没数据"时睡眠等待,避免忙等浪费 CPU。
2026-01-31 16:07:23
784
原创 unique_lock 能不能替代 lock_guard(adopt_lock)
可以,而且在很多场景里 std::unique_locklock_guard。但要看你想替代的是哪一种用法。
2026-01-30 17:20:54
318
原创 lock_guard(m, adopt_lock)必须放在作用域的最后吗
/ 临界区于是误以为:“哦,好像只能在最后写?其实不是。void f() {// 还没用到锁也没关系// 临界区完全 OK。可读性习惯lock();// 临界区只是为了让读代码的人一眼明白:从这里开始持锁// 临界区不留异常/return 空窗生命周期清晰不容易被误用❌不是必须放在作用域最后✅必须在锁已被当前线程持有之后立刻构造,并让它的作用域覆盖临界区。
2026-01-30 17:19:27
341
原创 scoped_lock 的原理是什么?为什么更安全?
RAII:构造时获取,析构时释放异常安全:即使抛异常也会释放无脑使用:不需要考虑忘记释放代码简洁:一行搞定,减少出错可能本质std::lock+ RAII 包装器。
2026-01-30 17:03:00
439
原创 lock(m1,m2) 是已经人为给这两个锁排好序了吗?必须要m1解锁后才能给m2上锁吗
先锁 m1 再锁 m2,而是。,不是简单的按顺序加锁。,失败就全部释放重试。
2026-01-30 16:55:21
268
原创 用代码解释 unique_lock 的用法,以及和 lock_guard 的不同
是否能手动解锁]lock_guard: 不行(只能等作用域结束): 可以unlock()/ 再lock()[是否支持延迟加锁]lock_guard: 不支持: 支持defer_lock[是否支持 try_lock]lock_guard: 不支持: 支持,并可用判断是否拿到锁[开销/复杂度]lock_guard: 更轻、更简单(常用首选): 更重但更灵活(需要灵活控制时用)
2026-01-29 17:27:28
1088
原创 C++ 多线程与线程同步面试题大全
答:多个线程同时访问共享资源时,程序行为仍然正确,不会出现数据竞争或不一致。实现方式互斥锁(mutex)原子操作(atomic)线程局部存储(thread_local)不可变数据答:两个或多个线程同时访问同一内存位置,且至少一个是写操作,且没有同步机制。// 数据竞争示例i < 10000;// 非原子操作,存在竞争t1.join();t2.join();// 结果不确定,可能 < 20000死锁条件互斥持有并等待不可剥夺循环等待。
2026-01-29 10:18:43
492
原创 高级软考-系统架构设计师知识点9——架构风格总结
软件体系结构风格(Architectural Style)是对系统中组件(Component)与连接件(Connector)之间组织方式的一种通用模式或模板。简单理解:系统由哪些部分组成、这些部分如何交互。不同风格代表不同的系统设计思想。风格核心思想优点缺点应用数据流顺序数据处理模块独立,可重用不能动态交互编译器、流水线调用/返回函数调用层次结构结构清晰,层次分明耦合高普通应用数据共享共享数据存储数据一致,模块解耦数据竞争DBMS、IDE独立组件。
2025-11-03 11:09:38
197
原创 Linux 中sudo bash -i 和 su root 有什么区别?
对比项su root是否需要 root 密码❌ 否(用自己密码)✅ 是环境变量是否切换到 root部分继承原用户完全切换是否进入 root 的 home 目录否是权限方式临时提升权限完全切换用户安全性(审计)高(sudo 可记录日志)相对低推荐使用场景普通用户临时提权系统管理员登录 root✅是“以 root 权限打开一个交互 shell(仍保留原用户环境)”;su root是“切换成真正的 root 用户(连环境也变)”。
2025-10-31 11:04:34
528
原创 高级软考-系统架构设计师知识点7——判定覆盖和条件覆盖
要求 A、B 各自都要取到 T、F 各一次。判定结果由 A 和 B 的组合决定。✅ A 有 T/F,B 也有 T/F。结果为 真 和 假 各出现一次。:指整个逻辑表达式的真假结果。,但不保证每个条件都变化过。判定结果为 F、T 各一次。❌ 但判定结果一直为 T,,但不一定导致分支变化。我们来看一个典型例子👇。所以,两者互不包含。
2025-10-30 10:40:06
573
原创 高级软考-系统架构设计师知识点6——系统可靠性与可用性
属性英文定义通俗理解可靠性系统在规定时间内无故障运行的概率。“能不能坚持不出错?可用性系统在任意时刻能正常工作的概率。“现在能不能用?可靠性强调“不中断、不出错可用性强调“能用、恢复快题型示例答案选择题“系统在规定时间内无故障运行的概率称为( )。可靠性 ✅选择题“系统的可用性可表示为( )。综合题给出 MTBF 和 MTTR,要求计算可用性直接套公式判断题“系统可靠性越高,可用性一定越高。❌ 不一定,修复速度也影响可用性可靠性:强调“系统不出故障” → 看稳定性可用性。
2025-10-29 16:31:54
903
原创 高级软考-系统架构设计师知识点5——黑板体系结构
是一种**基于共享数据结构(黑板)共享的黑板(Blackboard)**来进行协作、推理与决策。所有模块通过黑板通信,不直接互相调用。
2025-10-23 17:42:20
353
原创 高级软考-系统架构设计师知识点4——自然连接
笛卡尔积(Cartesian Product)是关系代数中的一种二元运算,用于把两个关系(表)中每一行都与另一表的每一行组合。数学表示:R × S“行 × 行 = 所有可能的组合”如果一个表有 3 行,另一个表有 4 行,结果就有 3×4 = 12 行。
2025-10-23 17:40:26
786
原创 高级软考-系统架构设计师知识点3
效用树(Utility Tree)是 ATAM 方法中的核心分析工具,用于分层展示质量属性及其具体场景,并通过重要性与风险排序,帮助架构师聚焦最关键的系统质量问题。
2025-10-23 17:06:28
704
原创 高级软考-系统架构设计师知识点2
特点说明1️⃣ 关注质量属性聚焦性能、可用性、安全性、可修改性、可测试性等非功能性需求2️⃣ 基于场景分析通过构造“质量属性场景”进行具体评估3️⃣ 强调权衡分析分析架构中不同决策间的冲突和平衡点4️⃣ 多干系人参与架构师、用户、项目经理、测试、客户代表共同评审5️⃣ 风险驱动目标是发现架构风险而非验证代码正确性6️⃣ 定性为主,定量为辅通过专家讨论、分析推理,而非精确计算📘 小结:ATAM 是一种基于场景、关注质量、识别风险、支持权衡的架构评估方法。
2025-10-23 15:32:14
750
原创 高级软考-系统架构设计师知识点1
特性描述开发方式面向对象过程结构迭代 + 增量驱动机制用例驱动核心焦点架构中心生命周期划分启动、细化、构建、移交代表性工具目标提高可复用性、降低风险、保证高质量交付题型示例单选题“RUP 的三大核心特征是?”(答:用例驱动、架构中心、迭代增量)匹配题“将四个阶段与其主要目标配对”简答题“简述 RUP 的主要阶段及其任务”综合题“某公司采用 RUP 模型开发系统,请指出应在何阶段完成架构验证与风险分析。”(答:细化阶段)
2025-10-23 15:13:07
453
原创 给我的SLES 系统加了一块100G的硬盘,怎么能正常使用它呢
lsblk确认新盘 →分区 →格式化 →挂载 →修改/etc/fstab永久挂载。
2025-09-12 16:11:47
249
原创 SLES 系统中SCSI 设备 是用来做什么的?
(Small Computer System Interface)指的是通过 SCSI 协议或者兼容协议呈现给内核的存储类或外设设备。虽然最初的 SCSI 是一种并行总线接口,但在现代 Linux 中,LUN(来自 SAN 存储的逻辑单元,常见于 FC、iSCSI、FCoE)USB 存储设备(U 盘、移动硬盘,底层也包装成 SCSI 设备)这些 LUN 在系统中映射成 SCSI 设备,出现在。错误处理和恢复(SCSI 层会重试/重置设备),不局限于传统 SCSI 硬盘,而是包括。
2025-08-19 13:57:07
414
原创 Linux 系统中, LANG 和 LC_ALL变量有什么区别与联系?
在(以及其他类 Unix 系统)里,LANG和LC_ALL都属于相关的环境变量,用于控制系统的等。它们的作用既有联系又有区别,核心差别在于。
2025-08-15 14:19:26
493
原创 linux 系统依赖包查询命令汇总
命令类型作用数据来源等价缩写/说明反向依赖rpm 需要什么已安装包等价于反向依赖同上已安装包是--requires缩写正向依赖谁需要 rpm已安装包文件列表rpm 安装了哪些文件已安装包反向依赖仓库中 rpm 需要什么仓库信息类似但来源不同正向依赖哪些包需要 rpm仓库信息。
2025-07-15 10:29:39
807
原创 磁盘中的柱面指的是什么?和盘面、扇面有什么关系?
所有盘面上相同编号的磁道在空间上垂直对齐,这些对齐的磁道组合在一起,形成一个“柱面”。可以把柱面想象成一个“圆柱体”,穿过所有盘片。
2025-07-01 15:20:20
1196
原创 dnsmasq 是什么?
dnsmasq是一个为局域网设计的轻量级 DNS + DHCP + TFTP 服务工具,部署简单、资源占用低,非常适合家庭、办公室、开发环境使用。
2025-06-24 10:45:56
507
原创 DHCP 的作用是什么
DHCP 的作用是自动给设备分配 IP 地址、网关、DNS 等网络参数,让设备能自动联网,无需手动设置。DHCP 是让设备自动“上网”的关键协议,它通过自动分配 IP 地址等网络参数,大大简化了网络配置,是现代网络的基础服务之一。
2025-06-24 10:38:21
862
原创 Linux 系统中,/usr/bin/ 和/bin/的区别?
项目/bin//usr/bin/全称含义binary(核心二进制)user binary(用户空间二进制)历史用途存放最基础、最关键的命令(引导相关)存放普通用户程序依赖情况必须依赖极少,系统单独运行时也要能执行依赖/usr挂载,非必需启动前就能用常见命令lscpmvcatbash等vimgccgitpython等挂载依赖位于根文件系统位于/usr,可能是独立挂载分区引导阶段是否可用✅ 是❌ 否,/usr可能尚未挂载/bin/存放系统启动必需的基础命令,/usr/bin/
2025-06-23 17:16:49
485
1
原创 BIOS 和UEFI 的区别与联系?
项目BIOS(传统 BIOS)UEFI(统一可扩展固件接口)含义起源1980年代 IBM PC英特尔主导,后由 UEFI Forum 管理当前状态已逐步淘汰现代主流(尤其是64位系统)UEFI 是现代化、模块化、可扩展的 BIOS 替代方案,支持更大硬盘、图形化界面、更快启动速度和安全启动,是未来主流。
2025-05-30 14:35:42
872
原创 Linux SLES 系统的/var/log/下的常见文件及其作用
在系统中,/var/log/目录是系统日志的集中地,存储了各种服务、内核、系统消息的日志。以下是一些在/var/log/
2025-05-28 10:59:21
495
原创 SLES 系统的zypper升级rpm包
如果你已经装了这个包,且版本一样:zypper 会。,也只有在 zypper 执行安装操作时才生效;,就有可能什么都不做,冲突依然保留。💥 强制重新安装(即使已经装了)如果包已是最新,它会提示。,不会覆盖冲突文件;
2025-05-14 15:18:34
356
原创 Linux的SLES系统和其他几大系统之间的区别
SLES:专业、稳定、图形化配置好用,适合企业核心业务系统RHEL:企业通用标准,广泛兼容,适合大规模部署:云原生环境、轻量服务部署首选Debian:极致稳定,但更偏向技术用户:极客专属,滚动更新,非企业首选。
2025-05-13 12:42:51
698
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅