Python oferece três modelos de concorrência, e a escolha correta depende principalmente de se seu trabalho é I/O-bound ou CPU-bound — uma decisão fortemente influenciada pelo GIL (que impede que threads executem código Python em paralelo).
Os três modelos
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.
