Salta al contenuto principale

Concurrency

Dieci articoli sulla concorrenza con prove eseguite: event loop, goroutine, asyncio, virtual thread, Rust, race condition, lock-free e sistemi distribuiti.

Questa serie raccoglie 10 articoli (circa 146 minuti di lettura totale), pensati per un livello Avanzato. Gli argomenti principali trattati sono goroutine, event loop, concorrenza, thread.

10Articoli146 minLettura totaleAvanzatoLivello
goroutineevent loopconcorrenzathreadactor modelcall stack

Articoli della Serie

  1. 1

    01 - Modelli di Concorrenza a Confronto: Thread OS, Event Loop, Goroutine, Attori e Async/Await

    Mille attese da 100 ms costano 10 secondi con 10 thread e 0,1 con un event loop; quattro calcoli su un thread JS ne costano 12. Scegli il modello misurando.

  2. 2

    02 - Event Loop JavaScript: Come Funziona Davvero, Call Stack, Microtask e Macrotask

    Perché una Promise batte setTimeout a 0 ms e un ciclo lungo congela Node.js: call stack, microtask e macrotask spiegati con programmi eseguiti.

  3. 3

    03 - Goroutine e Channel in Go: Concorrenza Pratica con Communicating Sequential Processes

    In Go lanci un compito con go e lo fai parlare con gli altri tramite channel: goroutine, select, context e race detector spiegati con i loro limiti.

  4. 4

    04 - Async/Await Python Avanzato: asyncio Internals, TaskGroup e Cancellation Robusta

    gather lascia orfani i task quando uno fallisce, TaskGroup li cancella: errori, except*, cancellazione e timeout in asyncio, con programmi eseguiti.

  5. 5

    05 - Java Virtual Threads (Project Loom): Thread Platform vs Thread Virtuali e Structured Concurrency

    I virtual thread di Java 21 rendono economica l'attesa, ma il pinning di synchronized costa 4x su Java 21 e StructuredTaskScope è ancora in anteprima.

  6. 6

    06 - Rust Async e Tokio: Future, Pin, Waker e il Modello Zero-Cost Concurrency

    Una async fn in Rust non fa nulla finché qualcuno non la interroga: Future, Pin e Waker con un mini-runtime, poi Tokio con select!, canali e cancellazione.

  7. 7

    07 - Race Condition e Deadlock: Come Riconoscerli, Diagnosticarli e Prevenirli

    counter++ perde incrementi, un metodo synchronized non basta a evitare il saldo negativo e due lock incrociati bloccano tutto: esperimenti in Java e C con TSan.

  8. 8

    08 - Strutture Dati Lock-Free: Operazioni Atomiche, Memory Ordering e Compare-and-Swap

    Ciclo CAS, pila di Treiber, coda di Michael-Scott, ABA e memory ordering provati con programmi Java e C++ eseguiti: dove il lock-free funziona e dove no.

  9. 9

    09 - Backpressure e Flow Control: Gestire il Caso in cui il Producer Supera il Consumer

    Una coda illimitata fa attendere l'ultimo elemento quasi 3 secondi: code limitate, Reactive Streams, Reactor e asyncio per gestire il producer troppo veloce.

  10. 10

    10 - Sistemi Distribuiti e Concorrenza: CAP Theorem, Consistency Models e CRDT

    CAP vincola solo durante la partizione: quorum, vector clock, CRDT e saga spiegati con simulazioni Python eseguite, e dove il LWW perde un aggiornamento.