news 2026/8/12 20:03:23

高性能组件(二) - ringbuffer

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
高性能组件(二) - ringbuffer

锁相关

0 前言

自旋锁

自旋锁是位于用户态:忙等待

互斥锁


自旋锁和互斥锁的区别

  1. 等待策略:自旋锁用户态忙等待;互斥锁内核态休眠。
  2. 上下文切换:自旋锁一直占用核心,不会让出,所以没有上下文切换;互斥锁如果竞争失败,则会切换。
  3. 场景:自旋锁适合持锁时间短的场景;互斥锁适用于持锁事件长的场景。具体时间一般以用户 -> 内核内核->用户两段时间的和为界限,如果以下一般使用自旋锁,以上使用互斥锁。

1. 无锁队列实现

ringbuff 实现

实现一个spsc的队列
**注意:**所谓环形队列,其实是逻辑上的,物理存储是连续的缓存空间,通过取余的方式当索引到达尾部的时候重新挪到开头。

注意:根据计算机cpu和core的缓存机制,对一个数据都是存放于64B的cache line中,为了防止头和尾索引放在同一个缓存行导致伪共享,提高性能,所以使用alignas(64) std::size_t read_;的方式进行内存对齐。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 15:46:09

Jedis连接池

一、前言:为什么必须用连接池?在 Java 应用中直接使用 new Jedis() 创建单连接操作 Redis,看似简单,但在高并发场景下会迅速崩溃:❌ 每次请求新建 TCP 连接 → 耗时(毫秒级)❌ 频繁创建/销毁连接…

作者头像 李华
网站建设 2026/7/14 15:46:10

SpringDataRedis快速入门

一、前言:为什么用 Spring Data Redis?在 Spring Boot 项目中,直接使用 Jedis 或 Lettuce 操作 Redis 虽然灵活,但存在以下问题:❌ 需手动管理连接、异常处理❌ 序列化/反序列化逻辑重复❌ 无法享受 Spring 的依赖注入…

作者头像 李华
网站建设 2026/7/14 15:46:09

PAT 乙级 1044

这题还真是坑人。比如 26 转化成火星文&#xff0c;有了高位&#xff0c;就不要低位了&#xff0c;这种情况要单独讨论。#include<bits/stdc.h> using namespace std;int main() {string a[13] {"tret", "jan", "feb", "mar", …

作者头像 李华
网站建设 2026/7/14 15:46:07

第三方应用程序漏洞和木马制作小实验

中华人民共和国网络安全法 任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动;不得提供专门用于从事侵入网络、干扰网络正常功能及防护措施、窃取网络数据等危害网络安全活动的程序、工具:明知他人从事危害网络安全的活动的&am…

作者头像 李华