Backend Engineering · Concurrency · Distributed Systems

Notes on backend engineering, concurrency, distributed systems, data systems, and software engineering practice.

Start Here

All Series →
  1. Starts from the boundaries of concurrency problems, then builds toward hardware memory models, language-level concurrency semantics, and the mechanisms behind common concurrency primitives.

    9 articles · Java · JUC

Latest Articles

All Articles →
  1. Concurrency Programming (0): The Problem Space and Scope

    Defines the scope as concurrency within a single process on a single machine, then connects shared variables, shared memory, message passing, language concurrency semantics, and hardware implementation.

  2. Concurrency Programming (8): From Mutex to Read-Write Locks

    Continues with counter and counter + ready to explain how read-write locks allow concurrent readers, comparing Java's Lock API, Go sync.RWMutex, and the situation in CPython.

  3. Concurrency Programming (3): Mutexes — Atomicity, Visibility, and Ordering at the Language Level

    Continues with counter++ to explain how mutexes provide atomicity, visibility, and ordering, then compares Java synchronized, Go sync.Mutex, and CPython threading.Lock.

  4. Concurrency Programming (2): Language Memory Models — Rules Programmers Can Rely On

    Moves from hardware memory models back to the language layer: why languages need their own concurrency semantics, and what Java, Go, and CPython guarantee to concurrent programs.

  5. Concurrency Programming (1): Start with the Hardware — From count++ to Atomicity, Visibility, and Ordering

    Starting from the von Neumann architecture and instruction execution, this article follows count++ down to the hardware-level problems of atomicity, visibility, and ordering.

Engineering Knowledge

All Notes →

Beyond Engineering

All Notes →