批量pop堆以解决类定时器逻辑
最近遇到一个类定时器逻辑需求
可以抽象为write和rangeRead两个接口
- write
- 超高频,多线程调用
- 基本按从小到大写入(不严格自增)
- 基本不重复
- rangeRead
- 低频,固定一个线程调用
- 传入一个key,从最小值到key的所有值批量读取出来并删除
最近遇到一个类定时器逻辑需求
可以抽象为write和rangeRead两个接口
最初从jekyll迁到hexo的最大动力,就是hexo的live-2d插件的看板娘功能
相关攻略很多,例如Hexo-Live2d安装教程(自定义Live2d),不在赘述
我这里要写的是比较小众的spine模型在web上的展示
我兴冲冲的配好了hexo的配置和live-2d插件
Blog已经是第三次换框架了
最早是裸写html,然后迁到github pages的jekyll,目前打算换hexo了
由于github pages的jekyll不支持各种插件,因此非常难用
在翻看C++标准库源码的时候,突然发现std::sort的实现和我想的很不一样,并不是简单的快排
在查询了一些资料以后,大致搞明白了这个introsort的原理
这篇写的很好:知无涯之std::sort源码剖析
另外就是STL源码分析那一本写的很好,不是本文的重点,简单过一下,我的gcc版本是5.4.0
本文主要讨论独立缓存(redis等)和数据库的问题,需要和多个服务节点的内存缓存和数据库的问题进行区分
后者写入数据库以后,因为服务间rpc代价过高(包括失败代价),没办法再通知全部服务的去修改内存缓存,只能让每个服务的内存缓存自己做定时加载
另外,在正式讨论这个问题之前,必须知道在非强一致性协议下,无法做到完全的一致性,基于缓存的系统必须要容忍有不一致的时刻
对独立缓存(redis等)和数据库的操作可以分为两类:
tars的日志库的类图关系很绕,很容易忘,记录一下备用
源码分析基于tag v3.0.0
首先介绍一下会用到的主要代码路径和功能
1 | TarsCpp/util/include/util/tc_logger.h 日志库头文件 |
taf的日志库从流程上,分初始化,滚动日志,按天日志三部分,暂时只分析了滚动日志相关逻辑
在C++11中,除了原本的左值(lvalue),纯右值(rvalue),还加入了一个新的将亡值(xvalue)
本文试图分析以下问题:
C++在C++98/03是不推荐用stl的,因为很多类的效率都很低下
本篇博客会深入分析条件变量实现来理解两个问题:
这两个问题不仅是C会遇到,所有语言的封装几乎都不可避免
先区分一下条件和条件变量,条件是指常用情况下,signal线程修改的值,使得cond_wait判断该值后不再阻塞
一直以来用的友言第三方评论系统倒闭了,现在连官方网站都打不开了。
所有的评论数据全部丢失,很伤。那我宁愿用开源的评论系统了,例如isso。
下面记录一下isso的使用方法(isso-0.11.1版本)。
1 | 安装pip,sqlite |
做分布式事务的时候用到了存储过程加事务,由于忘记在存储过程中捕获异常rollback,导致了死锁
不过我select ... for update锁的是A表,实际线上却是B表被锁死
sql一块之前理解不深入,debug的过程重新复习一下
简化逻辑重现核心bug