Threads: Uma Visão Geral com Exemplos em Ruby e C
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
- 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.
- Melhor Aproveitamento dos Recursos: Em sistemas com múltiplos núcleos, threads podem ser executadas em paralelo, melhorando o desempenho.
- 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
- Complexidade: Gerenciar threads pode ser complexo, especialmente quando elas acessam recursos compartilhados.
- Problemas de Sincronização: Deadlocks e condições de corrida são problemas comuns em programas multithread.
- 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.