{
  "id": 7547642,
  "title": "Concurrency Programming (0): The Problem Space and Scope",
  "url": "https://urgent.news/2026/09/15/concurrency-programming-0-the-problem-space-and-scope",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-09-15T12:10:13.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/thinkerqaq/concurrency-programming-0-the-problem-space-and-scope-1ig5"
  },
  "original_language": "en",
  "account": "1. This article series focuses on concurrency within a single process on a single machine, specifically multiple execution units inside the same process. Examples include Java threads, Go goroutines, and Python threads or asyncio tasks. Inter-process communication, distributed systems, and network communication are not covered.\n\n2. To understand concurrency, start with a shared variable. Consider a process containing this variable: count = 0. Two execution units, Thread A and Thread B, both attempt to increment count twice. The final result is not guaranteed to be count = 2 due to how count++ can be broken down into three steps: read count, compute count + 1, and write count back.\n\n3. Two main coordination models for concurrent programming are shared memory and message passing. Shared memory involves multiple execution units directly accessing the same state, while message passing involves execution units exchanging information through messages. Both models aim to handle the problem of modifying shared state concurrently.\n\n4. The code works correctly in both synchronization and message passing approaches because of certain fundamental principles: atomicity, visibility, and ordering. These principles ensure that operations are executed as single, uninterruptible steps (atomicity), changes are immediately visible to other execution units (visibility), and operations occur in a specific sequence (ordering). These rules are defined by the programming language's concurrency semantics.",
  "summary": "Table of Contents 1. Define the Scope First 2. Start with a Shared Variable 3. Two Main Coordination Models 3.1 Shared Memory: Protect Shared State with Synchronization 3.2 Message Passing: Coordinate through Messages 4. Why Does This Code Work Correctly? 5. Languages Need to Define Concurrency Semantics 6. Why Do We Still Need to Go Down to the Hardware? 7. Next: Start with the Hardware 1.…",
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}