Ruby Crie um novo tópico

Ruby Crie um novo tópico

Um tópico é uma única unidade de execução em um programa. Um programa comum é um thread único, onde as instruções no programa são executadas sucessivamente até o término.

Por outro lado, a multi-threading permite que o programa crie vários tópicos onde as instruções em um programa podem executar. Oferece excelente utilização de recursos do sistema, como CPU e memória.

Em Ruby, usamos tópicos com a ajuda da aula de threads. Os tópicos em Ruby não são pesados, tornando-os eficientes para empregar simultaneidade em seus programas.

Os tópicos são implementados no intérprete Ruby para o rubi versão 1.9 e abaixo. A partir da versão 1.9 e acima, o encadeamento é implementado no sistema operacional.

Usando este guia, você aprenderá como implementar tópicos na programação rubi.

Ponto de nota: O intérprete de Matz (RM) tem um bloqueio global de intérprete que impede vários tópicos de executar simultaneamente. No entanto, isso não se aplica aos intérpretes de Jruby e Rubinius.

Criando um tópico

Como mencionado, podemos trabalhar com tópicos usando a classe Thread. Para criar um novo tópico, ligue para o tópico.novo método.

A sintaxe é:

Fio.Novo # thread Block vai aqui

Certifique -se de incluir o código que você deseja ter executado pelo tópico dentro do par de aparelhos encaracolados.

Aqui está um exemplo:

Fio.novo coloca "Olá, mundo!"

Vamos fazer um programa simples que calcula a área de um círculo.

Área defin
pi = 3.14159
rad = 7.3
retornar (pi * rad * rad)
fim
Fio.novo
área()
coloca "correndo dentro do tópico!"

coloca "execução completa!"

Se você executar o exemplo acima, você notará que não obtemos a área do círculo. Isso ocorre porque Ruby não espera que os threads criados terminem a execução. Para garantir que os threads sejam concluídos, precisamos ligar para o método de junção.

O método de junção vai pausar a execução do tópico principal e aguardará os threads especificados no método de junção para concluir.

A seguir, é apresentado o código de exemplo acima com o método de junção implementado.

Área defin
pi = 3.14159
rad = 7.3
retornar (pi * rad * rad)
fim
thread = thread.novo
coloca "A área do círculo é #Area () cm2"
coloca "correndo dentro do tópico!"

fio.juntar
coloca "execução completa!"

Neste exemplo, obtemos a saída do encadeamento, como mostrado abaixo:

A área do círculo é 167.41533109999997 CM2
Correndo dentro do tópico!
Execução completa!

Encerrar um thread

Ruby fornece várias maneiras de encerrar um tópico. Uma dessas maneiras é usar o método de matar.

A sintaxe é:

Fio.matar (tópico)

Especifique o nome do thread para encerrar dentro dos parênteses.

Exceções de thread

Você notará que, se uma exceção surgir dentro de um tópico, a execução do programa não para.

Por exemplo:

def error_me
levantar "erro!"
fim
Fio.novo error_me
coloca "eu ainda corro"

No exemplo acima, levantamos uma exceção dentro da função passada para o tópico. Você notará duas coisas:

  1. O tópico não exibirá a mensagem de erro
  2. O código após o tópico ainda é executado.

Em alguns casos, convém parar de execução se uma exceção surgir dentro de um tópico. Podemos fazer isso usando o abort_on_execption.

Por exemplo:

Fio.abort_on_exception = true
thready = thread.novo do
coloca "eu corro antes da exceção"
levantar "exceção ocorreu!"
fim
Thready.juntar
coloca "Desculpe, eu não corro!"

No exemplo acima, o programa será encerrado se quando ocorrer uma execução dentro do tópico. Aqui está um exemplo de saída:

Eu corro antes da exceção
# encerrado com exceção (relatário_on_exception é verdadeiro):
tópicos.RB: 4: em 'Block in': exceção ocorreu! (RuntimeError)
tópicos.RB: 4: em 'Block in
': Exceção ocorreu! (RuntimeError)

Variáveis ​​de encadeamento

Variáveis ​​criadas em um fio obedecem às regras do escopo do rubi. Eles só são acessíveis no escopo do tópico em que são criados.

Estados do tópico

Você pode buscar o estado de um determinado tópico usando o método de status. Você também pode usar o vivo para verificar se o tópico está em execução e pare para verificar se o tópico está morto.

Existem cinco valores de retorno para o método de status:

  1. Correndo - Retornos executados
  2. Dormir - retorna dormindo
  3. Abortar - Retorna abortando
  4. Encerrado com exceção - Retorna nil
  5. Rescindir normalmente - Retorna falsa.

Conclusão

Neste guia, discutimos o básico de trabalhar com tópicos na linguagem de programação do rubi.

É bom observar que há mais do que o que discutimos neste guia. Considere a documentação para saber mais.

Obrigado pela leitura!