Threads: Uma Visão Geral com Exemplos em Ruby e C

Threads: Uma Visão Geral com Exemplos em Ruby e C
Photo by Tim Mossholder / Unsplash

Threads são uma das principais abordagens para alcançar a concorrência em programação. Elas permitem que um processo execute múltiplas tarefas ao mesmo tempo, compartilhando o mesmo espaço de memória.

O que são Threads?

Uma thread é uma sequência de instruções dentro de um programa que pode ser executada independentemente das outras. Um processo pode ter várias threads, todas rodando simultaneamente e realizando diferentes tarefas.

Exemplo em Ruby

Ruby usa threads para realizar várias tarefas ao mesmo tempo. Aqui está um exemplo simples:

thread1 = Thread.new do
  3.times do
    puts "Thread 1 está rodando"
    sleep(1)
  end
end

thread2 = Thread.new do
  3.times do
    puts "Thread 2 está rodando"
    sleep(1)
  end
end

thread1.join
thread2.join

Neste exemplo, duas threads são criadas e executadas simultaneamente. Cada uma imprime uma mensagem três vezes, com um intervalo de um segundo entre cada impressão.

Exemplo em C

Em C, as threads são geralmente criadas usando a biblioteca POSIX Threads (pthreads).

#include <stdio.h>
#include <pthread.h>

void *threadFunction(void *arg) {
    int *num = (int*) arg;
    printf("Thread número %d\n", *num);
    return NULL;
}

int main() {
    pthread_t threads[2];
    int threadArgs[2] = {1, 2};

    for (int i = 0; i < 2; i++) {
        pthread_create(&threads[i], NULL, threadFunction, (void *) &threadArgs[i]);
    }

    for (int i = 0; i < 2; i++) {
        pthread_join(threads[i], NULL);
    }

    return 0;
}

Neste exemplo, duas threads são criadas em C usando a biblioteca pthreads. Cada thread executa a função threadFunction, imprimindo um número.

Vantagens do Uso de Threads

  1. Eficiência de I/O: Threads são úteis em operações de I/O, permitindo que o programa continue executando enquanto espera por uma operação de I/O ser concluída.
  2. Melhor Aproveitamento dos Recursos: Em sistemas com múltiplos núcleos, threads podem ser executadas em paralelo, melhorando o desempenho.
  3. Responsividade: Em aplicações com interface gráfica, threads podem manter a UI responsiva enquanto operações longas são executadas em background.

Desvantagens do Uso de Threads

  1. Complexidade: Gerenciar threads pode ser complexo, especialmente quando elas acessam recursos compartilhados.
  2. Problemas de Sincronização: Deadlocks e condições de corrida são problemas comuns em programas multithread.
  3. Overhead: Cada thread consome recursos do sistema, como memória e tempo de CPU.

Quando Usar Threads

  • Em aplicações que realizam muitas operações de I/O.
  • Quando é necessário manter a interface do usuário responsiva.
  • Para melhorar o desempenho em sistemas com múltiplos núcleos.

Quando Não Usar Threads

  • Em tarefas simples que não se beneficiam da execução paralela.
  • Quando a complexidade adicional de gerenciamento de threads não justifica os benefícios.
  • Em aplicações onde a sincronização e o gerenciamento de estado compartilhado podem ser problemáticos.

Conhecer threads é crucial para qualquer desenvolvedor que trabalhe com aplicações que exigem concorrência ou paralelismo. A escolha de usar threads deve ser baseada em uma compreensão clara de suas vantagens e desvantagens, bem como das necessidades específicas do aplicativo.

Read more