Python offre tre modelli di concorrenza, e la scelta corretta dipende principalmente dal fatto che il tuo lavoro sia I/O-bound o CPU-bound — una decisione fortemente influenzata dal GIL (che impedisce ai thread di eseguire il codice Python in parallelo).
I tre modelli
threading → multiple threads, ONE process. GIL-limited for CPU.
multiprocessing → multiple PROCESSES, each its own interpreter/GIL → true parallelism.
asyncio → single thread, cooperative coroutines yielding at await points.
