Sobes.tech
Middle

Como é que a multitarefa é realizada num dispositivo com um único núcleo?

sobes.tech IA

Resposta da IA

Num dispositivo com um único núcleo, a multithreading é emulada pelo sistema operativo através do mecanismo de quantum de tempo e troca de contexto.

  • Quantum de tempo: Cada thread recebe um pequeno intervalo de tempo do processador.
  • Multitarefa preemptiva: O sistema operativo interrompe a execução de um thread ao terminar o seu quantum de tempo ou quando espera por recursos (por exemplo, entrada/saída).
  • Troca de contexto: O estado do thread atual (registos do processador, ponteiro de instrução, estado da memória) é guardado, e o estado do próximo thread é carregado.
  • Ilusão de paralelismo: Graças a uma troca rápida entre threads, cria-se a impressão de que eles estão a executar em paralelo, embora em qualquer momento apenas um thread esteja a trabalhar no núcleo.

O iOS usa frameworks como GCD (Grand Central Dispatch) e Operation Queues, que abstraem estes mecanismos de baixo nível, simplificando a gestão de multithreading para o programador. O GCD usa pools de threads e gere automaticamente o seu ciclo de vida e planeamento nos núcleos de processador disponíveis (mesmo num só).

Por exemplo, usando GCD:

import Foundation

// Criação de uma tarefa assíncrona
DispatchQueue.global(qos: .userInitiated).async {
    // Código que será executado numa thread de fundo
    // Num dispositivo de um único núcleo, este código será entrelaçado
    // com a execução de outros threads/thread principal
    print("A ser executado na thread de fundo")
}

// A thread principal continua a execução
print("A ser executado na thread principal")

Mesmo num dispositivo de um único núcleo, o GCD colocará esta tarefa numa fila e atribuir-lhe-á quanta de tempo para execução, alternando entre ela e a thread principal (e outras threads, se existirem) para criar a ilusão de paralelismo.