Sobes.tech
Middle

Qual é a diferença entre assíncrono e multithreading?

sobes.tech IA

Resposta da IA

A assíncronia e a multitarefa são abordagens para executar tarefas em paralelo.

  • Multithreading (multithreading) implica criar e executar múltiplos threads dentro de um mesmo processo. Os threads são executados em paralelo (em sistemas multinúcleo) ou pseudo-paralelamente (em sistemas de núcleo único através de troca de contexto). Adequado para tarefas que utilizam intensamente a CPU.

    import threading
    import time
    
    def task(name):
        # Simulação de trabalho
        time.sleep(1)
        print(f"Thread {name} terminado")
    
    threads = []
    for i in range(3):
        thread = threading.Thread(target=task, args=(i,))
        threads.append(thread)
        thread.start() # Iniciar thread
    
    for thread in threads:
        thread.join() # Esperar pela conclusão do thread
    
    print("Todos os threads terminaram")
    
  • Assincronia (asynchronous) baseia-se no uso de um único thread de execução (ou poucos) com uma arquitetura orientada a eventos. Em vez de esperar pela conclusão de uma operação bloqueante (como entrada/saída), a tarefa "cede" o controle, permitindo que outras tarefas sejam executadas, e depois se "reanuda" quando a operação termina. Adequado para tarefas I/O-bound.

    import asyncio
    import time
    
    async def async_task(name):
        # Simulação de operação assíncrona bloqueante (por exemplo, requisição de rede)
        await asyncio.sleep(1)
        print(f"Tarefa assíncrona {name} terminada")
    
    async def main():
        tasks = []
        for i in range(3):
            task = asyncio.create_task(async_task(i))
            tasks.append(task)
    
        await asyncio.gather(*tasks) # Esperar pela conclusão das tarefas assíncronas
    
    if __name__ == "__main__":
        asyncio.run(main())
        print("Todas as tarefas assíncronas terminaram")
    

Principais diferenças:

Aspeto Multithreading Asyncio
Execução Vários threads, em paralelo ou pseudo-paralelo Geralmente um único thread com troca de tarefas
Modelo Baseado em threads do SO, multitarefa preemptiva Baseado em ciclo de eventos, multitarefa cooperativa
Complexidade Gestão de threads, bloqueios, GIL (em Python) Gestão de corrotinas, await/async
Uso Tarefas CPU-bound Tarefas I/O-bound
GIL (Python) Limita o paralelismo real para código CPU-bound Não é um problema para tarefas I/O-bound