文先生的博客

  • 首页
  • 文集分类
    • 技术 (13)
      • [技术] 回顾 2023 阅读的技术书籍
      • [知乎回答] socket的任意event都会导致epoll_wait的惊群效应吗?
      • [知乎回答] Nginx为啥使用ET模式Epoll?
      • [知乎回答] epoll的EPOLLEXCLUSIVE真的能防住惊群吗?
      • [知乎回答] 协程如何做到切换到另一个函数还能完成原函数的IO?
      • [知乎回答] 程序员都是怎么记笔记的?
      • [知乎回答] 作为程序员的你,工作台是怎样的?
      • [知乎回答] 如何设计内存池?
      • [知乎回答] poll/epoll函数中的各种event分别应该在什么时候监听并处理呢?
      • 我的阅读书单
      • Collection
      • 商品秒杀问题的思考
      • 文件服务器架构逻辑
    • c/c++ (41)
      • [C++] 提高 C++ 项目编译速度的神兵利器
      • [C++] Google Authenticator 算法实现
      • [C++] 使用时间轮实现对象的操作频率限制
      • [C++] 浅析 std::share_ptr 内部结构
      • [C++] 深入探索 C++ 多态 ④ - 模板静态多态
      • [C++] 右值引用
      • [muduo] vscode + gdb 调试 muduo
      • [C++] 深入探索 C++ 多态 ③ - 虚析构
      • [C++] 深入探索 C++ 多态 ② - 继承关系
      • [转载] What is the VTT for a class
      • [stl 源码分析] 浅析 std::vector::emplace_back
      • [QT] 浅析信号与槽
      • [C++] C++ 有什么好用的线程池?
      • [C++] 深入探索 C++ 多态 ① - 虚函数调用链路
      • [C++] 浅析 C++11 移动语义
      • [stl 源码分析] std::sort
      • (ubuntu) vscode + gdb 调试 c++
      • [stl 源码分析] std::vector::push_back 内存扩充
      • [stl 源码分析] std::list::size 时间复杂度
      • 基于 stl map 的定时器(C++)
      • 剖析 stl + glibc “内存泄漏” 原因
      • 计算两个集合差集(C++)
      • protobuf / json 数据转换(C++)
      • [C++] 理解 C++ 多线程条件变量 pthread_cond_wait 使用
      • c++ 分割字符串函数
      • cryptopp 加密库使用
      • gettimeofday 获取本地时间
      • jemalloc 性能测试
      • [数据库] 自动代码工具 - 分析 mysql 脚本(*.sql)生成 C++ 源码
      • libev 源码理解方式
      • gcc/make/Makefile 源码编译
      • strncpy 安全吗?
      • [多线程] 剖析嵌套式死锁问题
      • printf 问题的思考
      • 反汇编查看宏函数/函数调用原理
      • Linux 下实现 itoa 转二进制
      • 类型强制转换异常跟踪
      • c++ 语言基础知识
      • stl 基础知识
      • c 语言基础知识
      • C++ 日志宏定义
    • 工具 (18)
      • MacOS 安装使用 Docker
      • perf 常用方法
      • (Centos 7)GDB 调试 glibc(附视频)
      • ubuntu 20.4 常用软件安装
      • rsync 传输文件
      • Centos7 常用软件安装
      • MacOS 通过虚拟机(Virtual Function)安装 Centos7
      • tmux 常用快捷键
      • vscode 一键(快捷键)执行脚本命令
      • LLDB 使用
      • Linux 软件性能分析--火焰图 🔥
      • tmux 返回前一个 panel 快捷键
      • vim c++ 代码自动格式化配置
      • Git 常用命令场景
      • GDB 使用
      • Siege HTTP 压力测试
      • Centos7 vim 编码环境 (C++/golang)
      • ccache 优化 C++ 编译速度
    • redis (41)
      • [Redis] 浅析 Redis 并发模型
      • 延时双删(redis-mysql)数据一致性思考
      • [hiredis 源码走读] redis pipeline
      • [redis 源码走读] maxclients 最大连接数限制
      • [redis 源码走读] 域名解析 - getaddrinfo
      • [redis 源码走读] sentinel 哨兵 - 通知第三方
      • [redis 源码走读] redis 与 raft 算法
      • [redis 源码走读] sentinel 哨兵 - 故障转移
      • [redis 源码走读] sentinel 哨兵 - 选举投票
      • [kimserver] libev + hiredis redis 异步连接池
      • [hiredis 源码走读] 异步回调机制剖析
      • [redis 源码走读] sentinel 哨兵 - 主客观下线
      • [redis 源码走读] sentinel 哨兵 - 节点链接流程
      • [redis 源码走读] sentinel 哨兵 - 原理
      • [redis 源码走读] 主从数据复制 ②
      • redis 为啥这么快
      • [redis 源码走读] 主从数据复制 ①
      • [redis 源码走读] 异步通信流程-单线程
      • [redis 源码走读] 多线程通信 I/O
      • [redis 源码走读] 事件 - 文件事件
      • [redis 源码走读] 事件 - 定时器
      • redis 持久化方式 - aof 和 rdb 区别
      • [redis 源码走读] aof 持久化 ①
      • [redis 源码走读] aof 持久化 ②
      • [redis 源码走读] rdb 持久化 - 文件结构
      • [redis 源码走读] rdb 持久化 - 应用场景
      • [redis 源码走读] maxmemory 数据淘汰策略
      • [redis 源码走读] redis 过期策略
      • [redis 源码走读] 对象(redisObject)
      • [redis 源码走读] 整数集合(inset)
      • [redis 源码走读] 跳跃表(skiplist)
      • [redis 源码走读] 压缩列表(ziplist)
      • [redis 源码走读] 链表
      • [redis 源码走读] zmalloc
      • [redis 源码走读] 字符串(sds)
      • [redis 源码走读] 字典(dict)
      • 用 gdb 调试 redis
      • [redis 源码走读] sentinel 哨兵 - 脑裂处理方案
      • redis 学习的思考
      • 压测 redis 消息队列(golang)
      • hiredis + libev 异步测试
    • Go (5)
      • 简单的 http 通信校验(golang)
      • 物联网数据通信 mqtt - mosquitto
      • 简单说说 golang 的主要优点
      • golang & viper config & zookeeper
      • 压测 redis 消息队列(golang)
    • 科技 (4)
      • 智慧农场解决方案
      • Macbook Pro 副屏 - Gobigger 4k 便携屏使用体验
      • MacBook Pro 2019 13寸 体验
      • “黑科技”(ipad + termius + 100 元的蓝牙键盘)
    • 系统 (11)
      • 信号
      • x86_64 函数运行时栈帧内存布局
      • 常用汇编知识
      • 程序工作流程(Linux)
      • Linux 文件目录权限
      • 程序变量内存分布(Linux)
      • [shell] ssh 快捷登录
      • fork 进程测试 copy-on-write
      • [shell] sed 插入多行文本
      • [shell] shell 常用语法
      • Linux 常用命令
    • 即时通讯 (4)
      • 即时通讯方案
      • [即时通讯] 分布式系统-用户在线状态管理
      • [即时通讯] 千人群组-消息管理
      • [即时通讯] 视高企业协同办公系统
    • 分布式系统 (14)
      • [co_kimserver] libco mysql 连接池
      • [co_kimserver] co_kimserver 简介
      • [kimserver] 统计负载信息
      • [kimserver] 配置文件 config.json
      • [kimserver] zookeeper-client-c 接入流程思考
      • [kimserver] 分布式系统 - 一致性哈希算法
      • [kimserver] 分布式系统 - 节点发现
      • [kimserver] 父子进程传输文件描述符
      • [kimserver] 分布式系统-多进程框架节点通信
      • zookeeper-client-c 异步/同步工作方式
      • 安装 ZooKeeper
      • [kimserver] libev + hiredis redis 异步连接池
      • [kimserver] C++ 异步非阻塞 Mysql 连接池
      • golang & viper config & zookeeper
    • 数据库 (4)
      • [数据库] sqlite3 模糊查找效率
      • [数据库] mysql 常用命令配置
      • [数据库] 自动代码工具 - 分析 mysql 脚本(*.sql)生成 C++ 源码
      • [数据库] mysql 数据库创建,删除,导入,导出数据 shell 脚本
    • 算法 (5)
      • [算法] 一致性哈希算法
      • 算法 lru c++ 实现
      • [算法导论] 堆排序
      • [算法导论] 归并排序
      • [算法导论] 快速排序
    • 随笔 (10)
      • [随笔] 最好的编程语言
      • [知乎回答] 程序员都是怎么记笔记的?
      • [知乎回答] 作为程序员的你,工作台是怎样的?
      • [随笔] 敏捷开发
      • trello - 化零为整
      • (研发)十年工作总结 - 平凡之路
      • github + jekyll 搭建博客
      • 用 Mac 第一次剪辑视频
      • 付费自习室
      • 早睡早起
    • nginx (9)
      • [知乎回答] Nginx为啥使用ET模式Epoll?
      • [知乎回答] epoll的EPOLLEXCLUSIVE真的能防住惊群吗?
      • 探索惊群 ⑥ - nginx - reuseport
      • 探索惊群 ⑤ - nginx - NGX_EXCLUSIVE_EVENT
      • 探索惊群 ④ - nginx - accept_mutex
      • 探索惊群 ③ - nginx 惊群现象
      • gdb 调试 nginx(附视频)
      • nginx 地址对齐(ngx_align_ptr)
      • [nginx 源码走读] 内存池
    • epoll (10)
      • [知乎回答] socket的任意event都会导致epoll_wait的惊群效应吗?
      • [知乎回答] Nginx为啥使用ET模式Epoll?
      • [知乎回答] epoll的EPOLLEXCLUSIVE真的能防住惊群吗?
      • [知乎回答] poll/epoll函数中的各种event分别应该在什么时候监听并处理呢?
      • 深入理解 epoll 回调用户数据
      • [内核源码] epoll lt / et 模式区别
      • [内核源码] epoll 实现原理
      • [内核源码] epoll 源码实现-预备知识
      • epoll 多路复用 I/O工作流程
      • [redis 源码走读] 事件 - 文件事件
    • network (11)
      • [network] 记一次网站网络流量优化
      • 浅析 HTTPS TLS(ECDHE)协议的握手流程(图解)
      • 探索惊群 ⑦ - 文件描述符透传
      • 探索惊群 ①
      • 简单的 http 通信校验(golang)
      • 字节序转换关系
      • 重温网络基础
      • HTTP 状态码
      • 高性能服务异步通信逻辑
      • epoll 多路复用 I/O工作流程
      • 抓包分析 tcp 握手和挥手
    • 内核 (30)
      • [内核源码] 浅析 CFS 完全公平调度器工作原理
      • [内核源码] tcp 连接队列
      • [内核源码] Linux 网络数据接收流程(TCP)- NAPI
      • tcp + epoll 内核睡眠唤醒工作流程
      • 如何学习 Linux 内核源码
      • 搭建 Linux 内核网络调试环境(vscode + gdb + qemu)
      • [知乎回答] socket的任意event都会导致epoll_wait的惊群效应吗?
      • [知乎回答] Nginx为啥使用ET模式Epoll?
      • [知乎回答] poll/epoll函数中的各种event分别应该在什么时候监听并处理呢?
      • 探索惊群 ⑥ - nginx - reuseport
      • 探索惊群 ⑤ - nginx - NGX_EXCLUSIVE_EVENT
      • 探索惊群 ④ - nginx - accept_mutex
      • 探索惊群 ③ - nginx 惊群现象
      • 探索惊群 ② - accept
      • 探索惊群 ①
      • [内核源码] Linux 系统调用(x86_64)
      • [内核源码] 网络协议栈 - write (tcp) 发送数据
      • [内核源码] 网络协议栈 - tcp 三次握手状态
      • [内核源码] 网络协议栈 - connect (tcp)
      • [内核源码] 网络协议栈 - accept (tcp)
      • [内核源码] 网络协议栈 - listen (tcp)
      • [内核源码] 网络协议栈 - bind (tcp)
      • [内核源码] 网络协议栈 - socket (tcp)
      • [内核源码] list 链表
      • vscode + gdb 远程调试 linux 内核源码(附视频)
      • gdb 调试 Linux 内核网络源码(附视频)
      • 学习 Linux 内存分配
      • [内核源码] epoll lt / et 模式区别
      • [内核源码] epoll 实现原理
      • [内核源码] epoll 源码实现-预备知识
    • 协程 (11)
      • [知乎回答] 协程如何做到切换到另一个函数还能完成原函数的IO?
      • [libco] 删除协程的正确姿势
      • [libco] libco 定时器(时间轮)
      • [co_kimserver] libco mysql 连接池
      • [co_kimserver] co_kimserver 简介
      • [libco] 协程栈空间
      • [libco] libco 不干活也费 CPU
      • [libco] libco 工作流程
      • [libco] 协程调度
      • [libco] 协程切换理解思路
      • [libco] 协程库学习,测试连接 mysql
  • 时间归档
    • 2025 (2)
      • [network] 记一次网站网络流量优化
      • [内核源码] 浅析 CFS 完全公平调度器工作原理
    • 2024 (6)
      • [C++] 提高 C++ 项目编译速度的神兵利器
      • [C++] Google Authenticator 算法实现
      • [C++] 使用时间轮实现对象的操作频率限制
      • [随笔] 最好的编程语言
      • [技术] 回顾 2023 阅读的技术书籍
      • [算法] 一致性哈希算法
    • 2023 (13)
      • [数据库] sqlite3 模糊查找效率
      • [C++] 浅析 std::share_ptr 内部结构
      • [Redis] 浅析 Redis 并发模型
      • [C++] 深入探索 C++ 多态 ④ - 模板静态多态
      • [C++] 右值引用
      • 浅析 HTTPS TLS(ECDHE)协议的握手流程(图解)
      • [muduo] vscode + gdb 调试 muduo
      • [C++] 深入探索 C++ 多态 ③ - 虚析构
      • [C++] 深入探索 C++ 多态 ② - 继承关系
      • [转载] What is the VTT for a class
      • [stl 源码分析] 浅析 std::vector::emplace_back
      • [QT] 浅析信号与槽
      • [C++] C++ 有什么好用的线程池?
    • 2022 (7)
      • [C++] 深入探索 C++ 多态 ① - 虚函数调用链路
      • [C++] 浅析 C++11 移动语义
      • MacOS 安装使用 Docker
      • [stl 源码分析] std::sort
      • (ubuntu) vscode + gdb 调试 c++
      • 延时双删(redis-mysql)数据一致性思考
      • [内核源码] tcp 连接队列
    • 2021 (59)
      • [内核源码] Linux 网络数据接收流程(TCP)- NAPI
      • tcp + epoll 内核睡眠唤醒工作流程
      • 如何学习 Linux 内核源码
      • 搭建 Linux 内核网络调试环境(vscode + gdb + qemu)
      • [知乎回答] socket的任意event都会导致epoll_wait的惊群效应吗?
      • [知乎回答] Nginx为啥使用ET模式Epoll?
      • [知乎回答] epoll的EPOLLEXCLUSIVE真的能防住惊群吗?
      • [知乎回答] 协程如何做到切换到另一个函数还能完成原函数的IO?
      • [知乎回答] 程序员都是怎么记笔记的?
      • [知乎回答] 作为程序员的你,工作台是怎样的?
      • [知乎回答] 如何设计内存池?
      • [知乎回答] poll/epoll函数中的各种event分别应该在什么时候监听并处理呢?
      • [随笔] 敏捷开发
      • perf 常用方法
      • (Centos 7)GDB 调试 glibc(附视频)
      • ubuntu 20.4 常用软件安装
      • 探索惊群 ⑦ - 文件描述符透传
      • 探索惊群 ⑥ - nginx - reuseport
      • 探索惊群 ⑤ - nginx - NGX_EXCLUSIVE_EVENT
      • 探索惊群 ④ - nginx - accept_mutex
      • 探索惊群 ③ - nginx 惊群现象
      • 探索惊群 ② - accept
      • 探索惊群 ①
      • [内核源码] Linux 系统调用(x86_64)
      • [内核源码] 网络协议栈 - write (tcp) 发送数据
      • [内核源码] 网络协议栈 - tcp 三次握手状态
      • rsync 传输文件
      • 信号
      • 简单的 http 通信校验(golang)
      • [内核源码] 网络协议栈 - connect (tcp)
      • [内核源码] 网络协议栈 - accept (tcp)
      • [内核源码] 网络协议栈 - listen (tcp)
      • [内核源码] 网络协议栈 - bind (tcp)
      • [内核源码] 网络协议栈 - socket (tcp)
      • 字节序转换关系
      • [内核源码] list 链表
      • 即时通讯方案
      • gdb 调试 nginx(附视频)
      • vscode + gdb 远程调试 linux 内核源码(附视频)
      • gdb 调试 Linux 内核网络源码(附视频)
      • 重温网络基础
      • 我的阅读书单
      • [stl 源码分析] std::vector::push_back 内存扩充
      • 学习 Linux 内存分配
      • [stl 源码分析] std::list::size 时间复杂度
      • 基于 stl map 的定时器(C++)
      • 剖析 stl + glibc “内存泄漏” 原因
      • [libco] 删除协程的正确姿势
      • [libco] libco 定时器(时间轮)
      • [co_kimserver] libco mysql 连接池
      • [co_kimserver] co_kimserver 简介
      • [数据库] mysql 常用命令配置
      • [hiredis 源码走读] redis pipeline
      • [libco] 协程栈空间
      • 深入理解 epoll 回调用户数据
      • Centos7 常用软件安装
      • [redis 源码走读] maxclients 最大连接数限制
      • [libco] libco 不干活也费 CPU
      • MacOS 通过虚拟机(Virtual Function)安装 Centos7
    • 2020 (95)
      • [libco] libco 工作流程
      • [libco] 协程调度
      • [libco] 协程切换理解思路
      • x86_64 函数运行时栈帧内存布局
      • 常用汇编知识
      • [redis 源码走读] 域名解析 - getaddrinfo
      • [libco] 协程库学习,测试连接 mysql
      • [kimserver] 统计负载信息
      • [kimserver] 配置文件 config.json
      • [kimserver] zookeeper-client-c 接入流程思考
      • tmux 常用快捷键
      • 物联网数据通信 mqtt - mosquitto
      • 计算两个集合差集(C++)
      • protobuf / json 数据转换(C++)
      • [kimserver] 分布式系统 - 一致性哈希算法
      • vscode 一键(快捷键)执行脚本命令
      • [kimserver] 分布式系统 - 节点发现
      • [kimserver] 父子进程传输文件描述符
      • [kimserver] 分布式系统-多进程框架节点通信
      • [C++] 理解 C++ 多线程条件变量 pthread_cond_wait 使用
      • LLDB 使用
      • zookeeper-client-c 异步/同步工作方式
      • 安装 ZooKeeper
      • c++ 分割字符串函数
      • [redis 源码走读] sentinel 哨兵 - 通知第三方
      • [redis 源码走读] redis 与 raft 算法
      • [redis 源码走读] sentinel 哨兵 - 故障转移
      • [redis 源码走读] sentinel 哨兵 - 选举投票
      • 智慧农场解决方案
      • [kimserver] libev + hiredis redis 异步连接池
      • trello - 化零为整
      • [kimserver] C++ 异步非阻塞 Mysql 连接池
      • cryptopp 加密库使用
      • [hiredis 源码走读] 异步回调机制剖析
      • gettimeofday 获取本地时间
      • jemalloc 性能测试
      • Linux 软件性能分析--火焰图 🔥
      • 简单说说 golang 的主要优点
      • HTTP 状态码
      • [redis 源码走读] sentinel 哨兵 - 主客观下线
      • [redis 源码走读] sentinel 哨兵 - 节点链接流程
      • 高性能服务异步通信逻辑
      • [内核源码] epoll lt / et 模式区别
      • [redis 源码走读] sentinel 哨兵 - 原理
      • [数据库] 自动代码工具 - 分析 mysql 脚本(*.sql)生成 C++ 源码
      • [redis 源码走读] 主从数据复制 ②
      • redis 为啥这么快
      • libev 源码理解方式
      • [即时通讯] 分布式系统-用户在线状态管理
      • [redis 源码走读] 主从数据复制 ①
      • Collection
      • Macbook Pro 副屏 - Gobigger 4k 便携屏使用体验
      • [redis 源码走读] 异步通信流程-单线程
      • 程序工作流程(Linux)
      • [内核源码] epoll 实现原理
      • [内核源码] epoll 源码实现-预备知识
      • gcc/make/Makefile 源码编译
      • epoll 多路复用 I/O工作流程
      • [redis 源码走读] 多线程通信 I/O
      • 抓包分析 tcp 握手和挥手
      • strncpy 安全吗?
      • [redis 源码走读] 事件 - 文件事件
      • [redis 源码走读] 事件 - 定时器
      • redis 持久化方式 - aof 和 rdb 区别
      • [redis 源码走读] aof 持久化 ①
      • [redis 源码走读] aof 持久化 ②
      • 商品秒杀问题的思考
      • [redis 源码走读] rdb 持久化 - 文件结构
      • [redis 源码走读] rdb 持久化 - 应用场景
      • Linux 文件目录权限
      • (研发)十年工作总结 - 平凡之路
      • 算法 lru c++ 实现
      • [多线程] 剖析嵌套式死锁问题
      • [redis 源码走读] maxmemory 数据淘汰策略
      • printf 问题的思考
      • [redis 源码走读] redis 过期策略
      • 程序变量内存分布(Linux)
      • github + jekyll 搭建博客
      • 反汇编查看宏函数/函数调用原理
      • nginx 地址对齐(ngx_align_ptr)
      • [redis 源码走读] 对象(redisObject)
      • [redis 源码走读] 整数集合(inset)
      • [redis 源码走读] 跳跃表(skiplist)
      • 用 Mac 第一次剪辑视频
      • [redis 源码走读] 压缩列表(ziplist)
      • [redis 源码走读] 链表
      • [nginx 源码走读] 内存池
      • [redis 源码走读] zmalloc
      • [redis 源码走读] 字符串(sds)
      • Linux 下实现 itoa 转二进制
      • 付费自习室
      • [redis 源码走读] 字典(dict)
      • [shell] ssh 快捷登录
      • 用 gdb 调试 redis
      • fork 进程测试 copy-on-write
    • 2019 (18)
      • [redis 源码走读] sentinel 哨兵 - 脑裂处理方案
      • 早睡早起
      • [算法导论] 堆排序
      • [算法导论] 归并排序
      • [算法导论] 快速排序
      • tmux 返回前一个 panel 快捷键
      • redis 学习的思考
      • MacBook Pro 2019 13寸 体验
      • [即时通讯] 千人群组-消息管理
      • vim c++ 代码自动格式化配置
      • [数据库] mysql 数据库创建,删除,导入,导出数据 shell 脚本
      • [shell] sed 插入多行文本
      • golang & viper config & zookeeper
      • [即时通讯] 视高企业协同办公系统
      • Git 常用命令场景
      • [shell] shell 常用语法
      • Linux 常用命令
      • GDB 使用
    • 2018 (8)
      • “黑科技”(ipad + termius + 100 元的蓝牙键盘)
      • 压测 redis 消息队列(golang)
      • 类型强制转换异常跟踪
      • hiredis + libev 异步测试
      • Siege HTTP 压力测试
      • c++ 语言基础知识
      • stl 基础知识
      • c 语言基础知识
    • 2017 (3)
      • Centos7 vim 编码环境 (C++/golang)
      • ccache 优化 C++ 编译速度
      • C++ 日志宏定义
    • 2016 (1)
      • 文件服务器架构逻辑
  • 我的链接
    • Github
    • Processon
    • Bilibili
  • [network] 记一次网站网络流量优化

    2025-10-31
    network

    近期将博客迁移至阿里云 Docker 环境后,网站出现流量激增与首页加载缓慢的问题。

    经排查,瓶颈主要集中于图片资源与服务端缓存配置。通过一系列针对性优化,页面首次加载流量由 7 MB 显著优化至 500KB 左右,性能得到大幅提升。

    [network] 记一次网站网络流量优化
    阅读全文

  • [内核源码] 浅析 CFS 完全公平调度器工作原理

    2025-10-10
    内核

    本文结合 Linux 5.0.1 内核源码,浅析 Linux 进程管理中的完全公平调度器(CFS)工作原理。

    [内核源码] 浅析 CFS 完全公平调度器工作原理
    阅读全文

  • [C++] 提高 C++ 项目编译速度的神兵利器

    2024-11-25
    c/c++

    最近接手的一个 Linux C++ 项目,编译速度把我折腾得怀疑人生。

    —— 编译经过优化,源代码一行未改,全编译时间硬是从 半个小时 缩短到 3 分钟 !!!(OMG,此处省略一万字…)

    划重点,三板斧:

    1. 多核并行编译: make -j N
    2. 编译缓存工具: ccache
    3. 分布式编译工具:distcc
    [C++] 提高 C++ 项目编译速度的神兵利器
    阅读全文

  • [C++] Google Authenticator 算法实现

    2024-10-15
    c/c++

    谷歌验证码 采用基于共享密钥的动态验证机制。服务端与客户端使用相同的密钥,并据此分别生成匹配的动态验证码以完成校验。

    尽管共享密钥本身并非绝对安全,但由于它仅在初次设置时低频次传输,且作为二次验证使用,因此仍能为核心账户安全提供一道坚实有效的屏障。

    [C++] Google Authenticator 算法实现
    阅读全文

  • [算法] 一致性哈希算法

    2024-01-08
    算法

    一致性哈希是后端系统中解决数据路由与负载均衡问题的关键技术。理解其工作原理,对于设计高扩展、高可用的分布式系统至关重要。本文将介绍其算法思想与经典应用场景。

    [算法] 一致性哈希算法
    阅读全文

  • [C++] 浅析 std::share_ptr 内部结构

    2023-12-28
    c/c++

    最近阅读了 C++ 智能指针的部分实现源码,简单总结和记录一下 std::share_ptr/std::weak_ptr 内部结构和工作原理。

    [C++] 浅析 std::share_ptr 内部结构
    阅读全文

  • [Redis] 浅析 Redis 并发模型

    2023-12-25
    redis

    很多朋友以为 Redis 是单线程程序,事实上它是 多进程 + 多线程 混合并发模型,这样能利用多核优势,提高性能。

    • 子进程持久化:重写 aof 文件 / 保存 rdb 文件。
    • 多线程:主线程 + 后台线程 + 新增网络 IO 线程(Redis 6.0)。
    [Redis] 浅析 Redis 并发模型
    阅读全文

  • 浅析 HTTPS TLS(ECDHE)协议的握手流程(图解)

    2023-10-08
    network

    通过 wireshark 抓取 HTTPS 包,理解 TLS 1.2 安全通信协议的握手流程。

    重点理解几个点:

    1. TLS 握手流程:通过 wireshark 抓取 HTTPS 包理解。
    2. 协商加密:双方通过 ECDHE 椭圆曲线的密钥交换算法,协商出共享的 会话密钥 进行内容对称加密通信,避免传输会话密钥被中间人窃取。
    3. CA 证书:证书用来验证服务端的合法性。证书类似于身份证,可以证明某人是某人,当然身份证可以伪造,一般人可能识别不出来,但是国家相关部门可以验证你的身份合法性。同理,服务端可以通过 CA 证书识别自身身份,客户端接收服务端发送的证书,并通过 证书链 验证该证书,以此确认服务端身份。

    浅析 HTTPS TLS(ECDHE)协议的握手流程(图解)
    阅读全文

  • [QT] 浅析信号与槽

    2023-07-21
    c/c++

    QT 的信号与槽技术,是一种用于对象间通信的机制。它允许一个对象发出一个信号,而其他对象可以通过连接到该信号的槽来接收并处理该信号。

    本文将通过调试走读 QT (5.14.2) 信号与槽开源源码,理解它的工作原理。

    [QT] 浅析信号与槽
    阅读全文

  • [C++] C++ 有什么好用的线程池?

    2023-02-13
    c/c++

    C++ 有什么推荐的线程池库吗?…

    [C++] C++ 有什么好用的线程池?
    阅读全文

  • [C++] 深入探索 C++ 多态 ① - 虚函数调用链路

    2022-12-27
    c/c++

    最近翻阅侯捷先生的两本书:(翻译)《深度探索 C++ 对象模型》 和 《C++ 虚拟与多态》,获益良多。

    要理解多态的工作原理,得理解这几个知识点的关系:虚函数、虚函数表、虚函数指针、以及对象的 内存布局。

    • 深入探索 C++ 多态 ① - 虚函数调用链路
    • 深入探索 C++ 多态 ② - 继承关系
    • 深入探索 C++ 多态 ③ - 虚析构
    • 深入探索 C++ 多态 ④ - 模板静态多态

    [C++] 深入探索 C++ 多态 ① - 虚函数调用链路
    阅读全文

  • [stl 源码分析] std::sort

    2022-02-23
    c/c++

    std::sort 是标准库里比较经典的算法,它是一个复合排序,结合了几种算法的优点。

    [stl 源码分析] std::sort
    阅读全文

  • [内核源码] Linux 网络数据接收流程(TCP)- NAPI

    2021-12-29
    内核

    走读 Linux(5.0.1)源码,理解 TCP 网络数据接收和读取工作流程(NAPI)。

    要搞清楚数据的接收和读取流程,需要梳理这几个角色之间的关系:网卡(本文:e1000),主存,CPU,网卡驱动,内核,应用程序。

    [内核源码] Linux 网络数据接收流程(TCP)- NAPI
    阅读全文

  • tcp + epoll 内核睡眠唤醒工作流程

    2021-12-16
    内核

    本章整理了一下服务端 tcp 的第三次握手和 epoll 内核的等待唤醒工作流程。

    tcp + epoll 内核睡眠唤醒工作流程
    阅读全文

  • 探索惊群 ①

    2021-09-25
    network  内核

    惊群比较抽象,类似于抢红包 😁。它多出现在高性能的多进程/多线程服务中,例如:nginx。

    探索惊群 系列文章将深入 Linux (5.0.1) 内核,透过 多进程模型 去剖析惊群现象、惊群原理、惊群的解决方案。

    1. 探索惊群 ①(★)
    2. 探索惊群 ② - accept
    3. 探索惊群 ③ - nginx 惊群现象
    4. 探索惊群 ④ - nginx - accept_mutex
    5. 探索惊群 ⑤ - nginx - NGX_EXCLUSIVE_EVENT
    6. 探索惊群 ⑥ - nginx - reuseport
    7. 探索惊群 ⑦ - 文件描述符透传
    探索惊群 ①
    阅读全文

  • [内核源码] 网络协议栈 - tcp 三次握手状态

    2021-08-17
    内核

    走读网络协议栈 tcp 的内核源码(Linux - 5.0.1 下载)。通过 Linux 内核源码理解 tcp 三次握手状态变化。

    因为我走读的是 Linux 5.0.1 源码,与旧版的 Linux 3.x 系列比较,新版的三次握手的状态已经发生改变,这个需要注意一下。

    [内核源码] 网络协议栈 - tcp 三次握手状态
    阅读全文

  • 即时通讯方案

    2021-07-08
    即时通讯

    im - 即时通讯,支持功能:文字 + 音视频 + 文件传输。分布式服务架构,支持海量用户。

    即时通讯方案
    阅读全文

  • 剖析 stl + glibc “内存泄漏” 原因

    2021-04-08
    c/c++

    最近项目增加了一个模块,在 Centos 系统压测,进程一直不释放内存。因为新增代码量不多,经过排查,发现 stl + glibc 这个经典组合竟然有问题,见鬼了!

    通过调试和查阅 glibc 源码,好不容易才搞明白它 “泄漏” 的原因:内存碎片!

    碎片将大块的空闲连续内存块割裂,导致空闲内存块没有达到返还系统的阈值,内存回收失败!

    深层原因:glibc 内部内存池管理空闲内存的策略问题,ptmalloc2 内存池的 fast bins 快速缓存和 top chunk 内存返还系统的特点导致。

    剖析 stl + glibc “内存泄漏” 原因
    阅读全文

  • [co_kimserver] co_kimserver 简介

    2021-03-25
    分布式系统  协程

    co_kimserver 是笔者基于协程库 libco 开发的一个支持分布式微服务的高性能 TCP 网络通信框架。

    详细请查看:github 。

    [co_kimserver] co_kimserver 简介
    阅读全文

  • [libco] 协程栈空间

    2021-03-08
    协程

    协程“栈”空间,有独立栈和共享栈,重点理解一下协程共享栈。

    [libco] 协程栈空间
    阅读全文

  • Linux 软件性能分析--火焰图 🔥

    2020-07-30
    工具

    火焰图是一种基于 SVG 格式的矢量图,由 Linux perf 性能分析工具采集的采样数据生成。它通过将软件在系统中的运行行为采样数据转化为图形化展示,为性能分析提供直观的可视化结果。

    Linux 软件性能分析--火焰图 🔥
    阅读全文

  • [内核源码] epoll lt / et 模式区别

    2020-06-11
    内核  epoll

    走读 Linux 内核源码(5.0.1),理解 epoll 的 lt / et 模式区别:

    1. 两个模式,事件通知方式不同,lt 持续通知直到处理事件完毕,et 一般只通知一次,不管事件是否处理完毕。
    2. et 模式,可以使得就绪队列上的新的就绪事件能被快速处理。
    3. et 模式,可以避免共享 “epoll fd” 场景下,发生类似 惊群问题。

    epoll 详细信息参考《[epoll 源码走读] epoll 实现原理》。

    [内核源码] epoll lt / et 模式区别
    阅读全文

  • [nginx 源码走读] 内存池

    2020-01-21
    nginx

    Nginx 内存池 (ngx_palloc.c) 专为优化小内存操作而设计。它通过将多次细碎的内存申请汇聚为少量批次请求,减少了与操作系统底层分配器的直接交互,以此提升整体性能。

    该内存池作为一种轻量级实现,其小内存分配器采用了 下次适配 算法。该算法从上次成功分配的地址开始线性扫描,并选择第一个足够大的空闲内存块。这种策略旨在减少搜索开销,并利用缓存局部性原理。

    [nginx 源码走读] 内存池
    阅读全文

  • [即时通讯] 千人群组-消息管理

    2019-11-14
    即时通讯

    即时通讯,消息有多种类型,单聊,群聊等等。

    群组聊天消息管理比较麻烦,因为涉及到多个用户,尤其是千人群组,1 个人发送消息,999 个人接收,数据库针对每个用户存储一条记录吗?这个量级的数据存储是十分恐怖的,所以消息的存储策略显得十分重要。

    [即时通讯] 千人群组-消息管理
    阅读全文

  • 文件服务器架构逻辑

    2016-11-08
    技术

    客户端 <–> 文件服务器代理 <–> FDFS

    文件服务器架构逻辑
    阅读全文

Contact me at:

粤ICP备20011260号

文章目录

微信赞赏支持

微信赞赏

关注我们

微信公众号,干货持续更新~

微信公众号 微信公众号