---
title: Concurrent B-Skiplist
url: https://www.emergentmind.com/topics/concurrent-b-skiplist
type: topic
---

# Concurrent B-Skiplist

Searching arXiv for the referenced Concurrent B-Skiplist and related skiplist papers.
Concurrent B-Skiplist denotes a blocked skiplist that combines the layered linked-list topology of a skiplist with multi-key nodes or blocks, so that multiple sorted keys are stored contiguously in each node while concurrent search, insertion, deletion, and range traversal remain supported. In the surveyed literature, the term covers both a synthetic design space that merges block-aware skiplist layouts with concurrent skiplist techniques and a concrete in-memory realization that uses fixed-size nodes, contiguous arrays, and a top-down, single-pass reader–writer locking protocol [2403.04582] [2507.21492]. The topic sits at the intersection of skiplist theory, external-memory indexing, cache-sensitive layout design, and concurrent ordered-index engineering, and it inherits from earlier B-skip-list work the aim of obtaining $O(\log_B n)$-like access behavior while retaining simpler structural maintenance than tree-based alternatives [1005.0662].

## 1. Origins, definition, and structural invariants

The antecedent of the concurrent form is the B-skip-list introduced as a “simpler uniquely represented alternative to B-trees,” where the structure is designed for external memory, has depth $O(\log_B(n))$, uses linear space with high probability, and supports efficient one-dimensional range queries [1005.0662]. In later tutorial and survey treatments, a B-skiplist is described more generally as a block-based, blocked, or cache-conscious skiplist variant that groups multiple consecutive keys into fat nodes or blocks in order to exploit spatial locality and reduce pointer overhead [2304.09983] [2403.04582].

In the blocked formulation, level 0 remains a sorted list of all elements, while higher levels act as express lanes. The 2025 in-memory formulation states the inclusion invariant explicitly: if a key appears at level $\ell$, it also appears at all levels $0,\dots,\ell-1$ [2507.21492]. Node organization is correspondingly block-centric rather than element-centric. Each node has a header key, defined there as the smallest key in the node, and every header of a level-$\ell$ node must be promoted to level $\ell+1$ [2507.21492]. Keys and values are laid out in contiguous arrays within the node, and internal nodes at level $\ell>0$ additionally store an array of down pointers aligned with the keys [2507.21492]. The survey’s synthetic design expresses the same idea at a coarser level: blocked nodes of size $B$ group multiple keys per node, and each level is a list of block pointers whose leaders or pivots summarize the covered ranges [2403.04582].

This blocked organization changes the unit of structure, synchronization, and locality. Traditional skiplists store one key per node, whereas a B-skiplist stores multiple sorted keys per node or per logical block [2507.21492]. A plausible implication is that the concurrency problem shifts from maintaining many fine-grained next pointers to coordinating fewer, denser nodes whose internal arrays, down-pointer arrays, and split boundaries must remain consistent under concurrent access.

## 2. Probabilistic model, occupancy, and memory hierarchy

Concurrent B-skiplists preserve skiplist probabilistic level assignment. Standard skiplist analysis uses a promotion probability $p$, with geometric level distribution and expected height $E[H] \approx O(\log_{1/p} n)$ [2403.04582]. The 2025 concurrent design keeps this framework but adapts it to blocking: height assignment uses independent coin flips with promotion probability $p$, and “in B-skiplists $p\approx 1/B$ to achieve blocking” [2507.21492]. With that choice, the expected number of keys stored per logical node is $\Theta(B)$, although the maximum number of keys per logical node is $\Theta(B\log n)$ with high probability [2507.21492].

The same paper defines high probability as
$$
\Pr[E_n] \ge 1 - 1/n^c
$$
for some constant $c$, gives the height distribution as
$$
P[\text{height} \ge h] = p^h,
$$
and states that the maximum height is $O(\log n)$ both in expectation and with high probability [2507.21492]. Because logical nodes can become too large under randomization, the implementation enforces fixed-size physical nodes. When a logical node exceeds capacity $B$, it is represented by multiple fixed-size nodes chained by next pointers at the same level; this overflow split bounds worst-case element moves in a single node to $O(B)$ [2507.21492].

The memory-hierarchy motivation is explicit across the literature. The 2025 design targets cache locality by choosing node size $B$ proportional to cache-line size, uses contiguous storage for keys and values, and supports binary search or small linear scans within nodes [2507.21492]. The survey’s synthetic external-memory perspective similarly treats blocked nodes as pages of size $B$, with top-level navigation through leaders or pivots and base-level range traversal over blocks [2403.04582]. Earlier B-skip-list work fixes parameters so that expected partition size aligns with block size, again tying probabilistic structure to the block-transfer model [1005.0662].

This synthesis suggests that “Concurrent B-Skiplist” is not a single fixed layout but a family of skiplist-derived structures parameterized by block size, promotion probability, and hardware target. In DRAM-oriented designs, the emphasis is LLC behavior and bounded in-node work; in external-memory and persistent-memory formulations, the same blocked organization is used to reduce random I/O or persistence traffic [2403.04582] [2507.21492].

## 3. Search, insertion, deletion, and range traversal

Search in a concurrent B-skiplist remains top-down. In the 2025 in-memory design, find starts at the topmost left sentinel, traverses left-to-right via next pointers until the next header exceeds the target key, performs in-node search to locate the predecessor slot and corresponding down pointer, follows the down pointer, and repeats until level 0 [2507.21492]. At level 0, presence is checked in the contiguous array. The survey’s synthetic block-aware search is analogous: navigate leaders at top levels, descend through block pointers, and use binary search or SIMD in the base block [2403.04582].

The central algorithmic contribution in the 2025 paper is a top-down, single-pass insertion algorithm. The height $h$ is determined upfront by random coin flips; nodes for levels $0,\dots,h-1$ are preallocated and linked vertically via down pointers; traversal proceeds read-only above level $h$; at level $h$ the key is inserted into the predecessor node; overflow is handled by allocating a new fixed-size node, linking it between the predecessor and successor, and moving half or boundedly many of the largest keys before inserting; then the algorithm descends and splices the preallocated promoted nodes at lower levels [2507.21492]. The inclusion invariant holds after the insertion finishes [2507.21492].

Deletes are described as symmetric in the same source: locate the key at level 0, remove it, then remove corresponding promoted occurrences and possibly merge or split nodes as needed, with fixed-size nodes again bounding per-node work [2507.21492]. The survey’s synthetic design broadens deletion options: entries may be marked as ghost entries and cleaned lazily during rearrangement or flush, or logical deletion may use marker nodes or null values in a CAS-based style [2403.04582].

Range queries exploit the blocked base layer. In the 2025 design, a range operation first performs a find for the start key and then iterates left-to-right at level 0, acquiring subsequent nodes’ keys until enough elements are returned or the right sentinel is reached [2507.21492]. The survey describes the corresponding external-memory behavior as starting from the leftmost base block covering the start key and scanning blocks sequentially, with range-search I/O complexity $O(\log_{B^{\epsilon}} N + K/B)$ in the write-optimized formulation [2403.04582]. A plausible implication is that blocked skiplists preserve the classic skiplist advantage on ranges while making the scan phase materially more locality-friendly because bottom-level keys are array-packed rather than node-separated.

## 4. Concurrency control mechanisms

The most explicit concurrent B-skiplist protocol in the provided literature is the top-down reader–writer scheme of the 2025 paper. Its stated goals are a single root-to-leaf pass, at most a constant number of locks held at once, and at most two levels locked concurrently [2507.21492]. Reader–writer locks are maintained per node. Finds and ranges acquire read locks only and proceed hand-over-hand left-to-right within levels, then top-to-bottom between levels, holding at most two locks at a time [2507.21492]. Inserts compute height and preallocate their node stack, traverse levels above $h$ with read locks only, switch to write locks at level $h$, and then continue downward in write mode to splice promoted nodes. The protocol may momentarily hold at most three write locks during promotion splits and at most two during overflow splits [2507.21492]. Deadlock freedom follows from a total lock acquisition order: left-to-right within a level, then top-to-bottom across levels [2507.21492].

The broader survey presents this scheme as one point in a larger design space. For lock-based concurrency, it draws on optimistic skiplist techniques in which searches are lock-free or read-only until the modification point, then predecessor and current nodes are locked and adjacency and non-marked status are validated before splicing [2403.04582]. For blocked nodes specifically, it notes group mutual exclusion within a block as a way to allow threads operating on different keys in the same node to proceed concurrently [2403.04582]. For lock-free adaptations, it suggests Harris-style logical deletion, CAS splicing of block-level list pointers, and Fomitchev–Ruppert-style three-step deletion with back pointers for helping after failed CAS attempts [2403.04582].

The same survey emphasizes decoupling and background maintenance. A contention-friendly design decouples base-level data modifications from index-level updates and uses an adaptive background thread to raise or lower towers and clean logically deleted entries [2403.04582]. Rotating layouts lower towers by incrementing a global ZERO atomically so that logical levels are reinterpreted without physically touching all pointers [2403.04582]. In distributed or RDMA settings, concurrency may instead be structured through partitioned ownership by top-level leaders, serialized writes per partition, and verification flags for remote-read atomicity [2403.04582].

These mechanisms reveal a common pattern: concurrency in a B-skiplist can be localized because the structure does not require global rebalancing. That does not eliminate synchronization complexity, but it changes its shape. The critical path typically consists of block-local insertion or deletion, occasional local split or merge, and limited upper-level splice operations, rather than tree-wide occupancy repair.

## 5. Architectural variants: external memory, persistent memory, NUMA, and batched parallelism

The survey identifies several block-aware skiplist families that can be interpreted as concurrent B-skiplist variants or ingredients [2403.04582]. In external memory, Bender et al.’s write-optimized skiplist is organized around block-based nodes containing pivots and buffers of pending items; inserts are buffered and flushed on overflow, and range searches cost $O(\log_{B^{\epsilon}} N + K/B)$ I/Os with high probability [2403.04582]. FlashSkipList combines an append-only top list with a chunked read-optimized component, using back-pointers to avoid erases and ghost entries for logical deletion [2403.04582]. Persistent-memory designs such as NV-skiplist, AS/ASCS, and PhaST group multiple entries per node, reduce persistence traffic by reconstructing internal levels after crash, or validate readers against late max-key updates during splits [2403.04582].

Cache-sensitive and SIMD-oriented work pushes the same blocked principle toward in-memory parallelism. Cache-sensitive skiplists linearize index layers into arrays and compute child positions arithmetically rather than through pointers [2403.04582]. PI stores upper-level entries contiguously, uses SIMD comparisons and routing tables, batches queries, partitions them across threads, and redistributes conflicts so that each modified data node is handled by exactly one thread; the paper reports that PI can be up to three times as fast as Masstree [1601.00159]. This is not an online per-node locking design, but it demonstrates a distinct concurrency model for blocked skiplist-like indexing: batched, latch-free range ownership rather than immediate structural locking [1601.00159].

A further direction is multiversioning. Jiffy is a multiversioned lock-free skip list whose lowest-level nodes hold immutable “revisions,” that is, grouped key-value entries stored in contiguous arrays; it supports lock-free snapshots, batch updates, and split/merge of fat nodes, and the paper describes this organization as a natural mapping to a concurrent B-skiplist [2102.01044]. This suggests that blocking and multiversion concurrency are not separate lines of work: immutable block revisions can serve simultaneously as locality units, synchronization granules, and snapshot/version boundaries.

Across these variants, the term “Concurrent B-Skiplist” therefore names a structural idea more than a single implementation recipe. The unifying features are blocked nodes, skiplist-level probabilistic indexing, and concurrency control adapted to block granularity; the particular mechanisms differ across DRAM, flash, PM, NUMA, and RDMA environments [2403.04582].

## 6. Performance characteristics, trade-offs, and relation to tree-based indices

The 2025 in-memory concurrent B-skiplist paper provides the clearest quantitative evidence. On 128 threads, it reports between 2x–9x higher throughput than state-of-the-art concurrent skiplists including Folly and Java ConcurrentSkipListMap, competitive throughput of 0.9x–1.7x on point workloads relative to cache-optimized tree-based indices, and between 3.5x–103x lower 99% latency than other concurrent skiplists on the studied point workloads with inserts [2507.21492]. It also reports 3.2–5.6× fewer LLC load misses than Folly on tested workloads [2507.21492]. On workload A with a uniform distribution, the reported 99% latency is approximately $3.22\,\mu s$ for the B-skiplist, versus approximately $24.67\,\mu s$ for the B+-tree and approximately $187.62\,\mu s$ for Masstree [2507.21492]. In the load phase, the B+-tree took the root write lock approximately 26K times versus approximately 7 times for the B-skiplist; in workload A the counts were approximately 8.3K versus approximately 3 [2507.21492].

These data support a specific interpretation of the B-skiplist/tree comparison. B-trees maintain higher and more deterministic node density and therefore can retain an advantage on long ranges; the 2025 paper states that its B+-tree achieved approximately 1.4× higher throughput on the studied range workload because of higher deterministic leaf-node density [2507.21492]. At the same time, the B-skiplist avoids second root-to-leaf passes and root-lock amplification associated with optimistic tree updates, which the paper uses to explain lower contention and better tail latency on insert-heavy point workloads [2507.21492].

Theoretical complexity statements track this empirical picture. In the 2025 in-memory model, expected finds and inserts cost $\Theta(\log_Z n)$ cache-line transfers when $B=\Theta(Z)$, expected ranges of size $r$ cost $\Theta(\log_Z n + r/Z)$, and worst-case behavior with high probability remains $\Theta(\log n)$ transfers because long runs can still occur [2507.21492]. Earlier B-skip-list analysis in the external-memory model gives expected $O(\log_B n)$ I/Os for lookup, insert, and delete, plus $O(\log_B n + k/B)$ for range queries [1005.0662]. The survey’s synthesis presents analogous expectations for blocked concurrent designs, typically framed as $O(\log_{B^\epsilon} N)$-like search and $O(\log_{B^\epsilon} N + K/B)$ range costs in write-optimized blocked layouts [2403.04582].

Parameter tuning is correspondingly central. The literature repeatedly ties performance to the joint choice of block size $B$ and promotion probability $p$. The 2025 implementation used fixed-size nodes of 2048 bytes, 128 key–value pairs of 16 bytes each, $c=0.5$, and thus $p=1/(cB)=1/64$ in its sensitivity study [2507.21492]. The survey gives the more general guidance that $p$ near $1/2$ is stable for classic skiplists, $1/4$ reduces memory, and blocked external-memory designs should calibrate $\epsilon$ and the effective sampling rate to the block size [2403.04582]. This suggests that a concurrent B-skiplist is best understood not as a universally dominant replacement for trees, but as a tunable ordered index whose main strengths are locality-preserving point access, simple local structural maintenance, and concurrency schemes that avoid global rebalance and broad critical sections.

## 7. Conceptual significance and common misunderstandings

One recurring misunderstanding is to treat a concurrent B-skiplist as merely an “unrolled skiplist.” The literature is broader. Some variants simply group multiple keys per node to reduce pointer chasing; others use fixed-size nodes with aligned down-pointer arrays; others use buffers and pivots for external memory; still others use immutable revisions, batch processing, or deterministic partitioning for unique representation [2403.04582] [2507.21492] [2102.01044] [1005.0662]. The common denominator is blocked skiplist organization under concurrency, not a single node layout.

A second misunderstanding is that blocking removes probabilistic irregularity. It does not. The 2025 paper states that logical node occupancy can still reach $\Theta(B\log n)$ with high probability, which is precisely why fixed-size physical nodes and overflow chaining are introduced [2507.21492]. Blocking improves expected locality and reduces height, but it does not by itself eliminate long runs or the need for split policies.

A third misunderstanding is that skiplists and trees differ only asymptotically. The literature instead emphasizes different maintenance disciplines. B-trees enforce deterministic occupancy and balanced descent, whereas B-skiplists retain randomized heights and tolerate variable node density, using local split and merge without rotations or global rebalance [2304.09983] [2507.21492]. This suggests that the principal distinction is operational rather than merely asymptotic: a concurrent B-skiplist trades some density regularity for simpler update paths and, in the measured in-memory design, substantially lower tail latency under insert-heavy contention [2507.21492].

Taken together, the literature presents Concurrent B-Skiplist as a convergent index design in which blocking, probabilistic layering, and concurrent locality-aware maintenance reinforce one another. Its exact realization varies—from uniquely represented external-memory structures to cache-optimized memtable replacements—but the central idea remains stable: make the skiplist’s ordered express-lane topology operate at block granularity, and make concurrency act on those blocks rather than on individual keys.

Source: https://www.emergentmind.com/topics/concurrent-b-skiplist