Why compare_exchange_weak fail spuriously?
重新理解compare_exchange操作。
重新理解compare_exchange操作。
上一篇主要介绍了chrono中的核心duration, 这篇继续介绍基于duration延伸出的若干概念:
之前断断续续使用过chrono中的方法, 对于其中的概念总是一知半解, 导致每次查cppreference总是抓不到重点. 这次就试着用直白的语言, 描述下chrono的概念和原理. 这一篇主要着重于介绍chrono的核心, duration.
Hazard pointer vs shared_ptr
能否有足够工程能力将理论算法变现?
断更太久,实在是最近太忙… 焦头烂额ing
什么是Upgrade Lock?
简单总结了下SIMD的常用Intrinsics。
我们代码里之前升级了fbthrift,客户端使用的channel类型从HeaderClientChannel换成了RocketClientChannel,默认是使用CompactProtocol,然后通过tcpdump抓包看了眼RPC层发送的数据,发现已经完全看不懂了,正好借此机会梳理一下。
Future的第二弹。
最近看了下在退出服务时在一些极端case下出现core的问题,顺便也重新梳理下fbthrift的启动和停止流程。在我们的一个服务进程中,会启动多个ThriftServer,他们的IO线程池和工作线程池是共享的,除了RPC Server对外暴露接口之外,当接收到一个RPC请求时,可能会调用服务进程中的其他组件(比如...
Future的第一弹。
How to write custom iterator
一个noexcept引发的血案。
什么是Type traits?
什么是Initializer Lists?
Sanitizer的paper reading和一些关键知识点。
上次研究了Fiber,这次结合C++ Coroutines TS(N4680)和folly::coro::Baton,看看Coroutine~
研究下folly的Fiber~
之前一直没有总结过Executor中的KeepAlive,最近因为工作中使用Executor又碰到了一些问题,趁热打铁一下。
最近忙的焦头烂额,只能匆匆更新一篇最近发现的folly中RCU的bug。不会对RCU做过多详细介绍,只会大致分析folly中RCU的实现,以及这个bug是如何造成的。
Parking lot vs Futex?
什么是Upgrade Lock?
Future的第二弹。
Future的第一弹。
之前一直没有总结过Executor中的KeepAlive,最近因为工作中使用Executor又碰到了一些问题,趁热打铁一下。
最近忙的焦头烂额,只能匆匆更新一篇最近发现的folly中RCU的bug。不会对RCU做过多详细介绍,只会大致分析folly中RCU的实现,以及这个bug是如何造成的。
前两篇我们大概讲述了分布式锁的原理和实现,以及围绕Redlock展开的争论。那么这一篇,我们会用TLA+描述一个简单的分布式锁,以及Martin Kleppmann提出的Fencing Token能否解决NPC(Network delay, Process pause, Clock drift)导致分布式锁共识失...
书接前文,看大牛们怎么理解分布式锁?
最近看了一些关于分布式锁的文章,很有意思,进行一下总结梳理。今天这一篇,我们会聚焦于为什么需要分布式锁,分布式锁能够保证什么,以及常见的分布式锁实现方式。
Hazard pointer vs shared_ptr
能否有足够工程能力将理论算法变现?
断更太久,实在是最近太忙… 焦头烂额ing
RocksDB Iterator系列的最后一篇,看一看SST文件的格式,以及基于SST的迭代器是如何工作的。
书接上篇,本文会分析MergingIterator内部是如何通过最小堆来保证迭代器输出的数据有序的。
Nebula里面的二级索引都是基于kv形式实现的,对索引而言,最重要的就是需要保证有序,然而RocksDB官方wiki一直对于使用Iterator的参数语焉不详。我在之前的博客中大概说明了相关参数的作用,但没有详细结合代码解释其原理,这次就重新整理一下。
RocksDB无数参数的管理办法.
RocksDB的DeleteRange代码走读。
RocksDB的Flush代码走读。
正确使用Prefix Seek的姿势。
坦率来说,这次入坑TLA+的主要目的就是为了能够试着验证快照隔离。啃了大半本Practical TLA+,看了不少其他人的例子,自己也尝试写了些spec,仍然只能说勉强入门了。在网上能找到的大多数事务相关的spec都是TLA+直接实现的,目前对于我来说未免还是太困难了点。因此这篇文章,会通过TLA+的伪代码语言P...
最近在看SnapshotIsolation的形式化验证,学习到了两个新概念Conflict Serializability和View Serializability。回顾下可串行化:多个事务执行的结果和这些事务按某种串行执行的结果相同。然后我们分别看下这两种串行化的概念。
面对真实的世界…
在上一篇里我们实现了一个最简单的2PC,其中无论RM还是TM都不会crash。在这一篇中我们会引入RM随时可能crash的情形,看看需要对2PC的实现进行多少修整。
2PC广泛运用于各种分布式系统,然而就是这样一个看似平平无奇的算法,想要正确实现,绝不是一件容易的事情。这个系列应该会陆续写三篇,第一篇主要会在TLA+中描述一个简单的2PC算法。
TLA+进阶哲学家问题~
TLA+哲学家问题~
坦率来说,这次入坑TLA+的主要目的就是为了能够试着验证快照隔离。啃了大半本Practical TLA+,看了不少其他人的例子,自己也尝试写了些spec,仍然只能说勉强入门了。在网上能找到的大多数事务相关的spec都是TLA+直接实现的,目前对于我来说未免还是太困难了点。因此这篇文章,会通过TLA+的伪代码语言P...
最近在看SnapshotIsolation的形式化验证,学习到了两个新概念Conflict Serializability和View Serializability。回顾下可串行化:多个事务执行的结果和这些事务按某种串行执行的结果相同。然后我们分别看下这两种串行化的概念。
面对真实的世界…
在上一篇里我们实现了一个最简单的2PC,其中无论RM还是TM都不会crash。在这一篇中我们会引入RM随时可能crash的情形,看看需要对2PC的实现进行多少修整。
2PC广泛运用于各种分布式系统,然而就是这样一个看似平平无奇的算法,想要正确实现,绝不是一件容易的事情。这个系列应该会陆续写三篇,第一篇主要会在TLA+中描述一个简单的2PC算法。
TLA+进阶哲学家问题~
TLA+哲学家问题~
坦率来说,这次入坑TLA+的主要目的就是为了能够试着验证快照隔离。啃了大半本Practical TLA+,看了不少其他人的例子,自己也尝试写了些spec,仍然只能说勉强入门了。在网上能找到的大多数事务相关的spec都是TLA+直接实现的,目前对于我来说未免还是太困难了点。因此这篇文章,会通过TLA+的伪代码语言P...
最近在看SnapshotIsolation的形式化验证,学习到了两个新概念Conflict Serializability和View Serializability。回顾下可串行化:多个事务执行的结果和这些事务按某种串行执行的结果相同。然后我们分别看下这两种串行化的概念。
面对真实的世界…
在上一篇里我们实现了一个最简单的2PC,其中无论RM还是TM都不会crash。在这一篇中我们会引入RM随时可能crash的情形,看看需要对2PC的实现进行多少修整。
2PC广泛运用于各种分布式系统,然而就是这样一个看似平平无奇的算法,想要正确实现,绝不是一件容易的事情。这个系列应该会陆续写三篇,第一篇主要会在TLA+中描述一个简单的2PC算法。
上一篇介绍了hpa (huge page allocator),这一篇继续介绍物理层的另一种page allocator: pac (page allocator classic)。
上一篇我们介绍了Jemalloc的逻辑层,这一篇我们把目光投向物理层,首先看page allocator中的一种hpa,也就是huge page allocator。
Jemalloc 5.3.0这个版本在分层和概念与之前版本有不少出入,再加上之前研究的core_analyzer也能分析Jemalloc的page allocator,希望通过学习进一步加深理解。整个介绍会分成几篇,第一篇聚焦于用户层面的malloc以及Jemalloc的逻辑层。
一个有意思的工具:Core Analyzer。这一篇以官方的介绍为主,顺便介绍一下安装和简单使用。
Parking lot vs Futex?
介绍一下Amazon最新推出的Aurora DSQL~
沉迷于优化器ing…
最近补了一些优化器相关的背景知识,今天分享一篇论文Counting, Enumerating, and Sampling of Execution Plans in a Cost-Based Query Optimizer.pdf (sigmodrecord.org)。这个paper基于Volcano和Casca...
前两篇我们大概讲述了分布式锁的原理和实现,以及围绕Redlock展开的争论。那么这一篇,我们会用TLA+描述一个简单的分布式锁,以及Martin Kleppmann提出的Fencing Token能否解决NPC(Network delay, Process pause, Clock drift)导致分布式锁共识失...
书接前文,看大牛们怎么理解分布式锁?
最近看了一些关于分布式锁的文章,很有意思,进行一下总结梳理。今天这一篇,我们会聚焦于为什么需要分布式锁,分布式锁能够保证什么,以及常见的分布式锁实现方式。
Future的第二弹。
Future的第一弹。
我们代码里之前升级了fbthrift,客户端使用的channel类型从HeaderClientChannel换成了RocketClientChannel,默认是使用CompactProtocol,然后通过tcpdump抓包看了眼RPC层发送的数据,发现已经完全看不懂了,正好借此机会梳理一下。
最近看了下在退出服务时在一些极端case下出现core的问题,顺便也重新梳理下fbthrift的启动和停止流程。在我们的一个服务进程中,会启动多个ThriftServer,他们的IO线程池和工作线程池是共享的,除了RPC Server对外暴露接口之外,当接收到一个RPC请求时,可能会调用服务进程中的其他组件(比如...
上周末带可可去了一趟玉渊潭,看到了让我难忘的一幕。
每次想要说些什么,但在动笔时总是苍白无力。
What is dynamic filter?
目前项目里采用了类似Velox的运行框架,其中出现了特别多问题。这里会总结Velox中最重要的三个类Task,Driver,Operator的生命周期。
What is dynamic filter?
目前项目里采用了类似Velox的运行框架,其中出现了特别多问题。这里会总结Velox中最重要的三个类Task,Driver,Operator的生命周期。
Aggregate的相关优化~
大致总结了下DuckDB的执行流程。注意全文中算子和Operator是同义词。
继续介绍LDBC Social Network Benchmark,这一篇我们主要介绍SNB Workload里的各个Query是如何生成的,以及在性能测试中Driver是如何执行Workload。
LDBC (Linked Data Benchmark Council) Social Network Benchmark,简称LDBC SNB,是一种针对社交网络场景的评估图数据库性能的基准测试。
我们代码里之前升级了fbthrift,客户端使用的channel类型从HeaderClientChannel换成了RocketClientChannel,默认是使用CompactProtocol,然后通过tcpdump抓包看了眼RPC层发送的数据,发现已经完全看不懂了,正好借此机会梳理一下。
简单总结了下SIMD的常用Intrinsics。
最近看了一些关于分布式锁的文章,很有意思,进行一下总结梳理。今天这一篇,我们会聚焦于为什么需要分布式锁,分布式锁能够保证什么,以及常见的分布式锁实现方式。
最近看了Kuzu的论文,大致做一下总结~
最近看了Kuzu的论文,大致做一下总结~
我们的程序在退出的时候,每次都crash。不废话直接上StackTrace: