Threads

Agora que entendemos como funciona o forking de processos, vamos explorar as threads. Threads são uma forma mais leve de concorrência, permitindo que múltiplas tarefas sejam executadas dentro do mesmo processo, compartilhando o mesmo espaço de memória.

Conforme explicado no módulo de C, conseguimos criar POSIX Threads através da chamada de função pthread_create. Na linguagem Ruby, conseguimos manipular kernel threads através da classe Thread.

# Função que será executada pela thread
def handle
  puts "Hello from thread!"
end

# Cria uma thread
thread = Thread.new do
  handle
end

puts "Hello from main thread!"

# Aguarda a thread terminar
thread.join

Simples, não? Podíamos também passar qualquer código Ruby pra dentro do bloco da thread, não precisa ser necessariamente um método:

Um exemplo mais robusto

Agora vamos fazer um exemplo mais complexo com threads, assim como fizemos com forking de processos:

Ruby dispensa comentários, não?


Vamos agora ver como Ruby resolve problemas de race condition.

Last updated