O que é um processo em Elixir?

Para aprender o que é um processo em Elixir, antes você tem que saber o que é uma função.

Por exemplo, IO.puts/1 é uma função que escreve algo na tela. A função se chama puts, ela está no módulo IO (de entrada I e saída O) e ela recebe um argumento:


This content originally appeared on DEV Community and was authored by Elixir UTFPR (por Adolfo Neto)

Para aprender o que é um processo em Elixir, antes você tem que saber o que é uma função.

Por exemplo, IO.puts/1 é uma função que escreve algo na tela. A função se chama puts, ela está no módulo IO (de entrada I e saída O) e ela recebe um argumento:

iex(1)> IO.puts("Adolfo")
Adolfo
:ok

Se tudo dá certo ela retorna o átomo :ok.
Uma função que te permite gerar (tradução talvez imprecisa de spawn, em inglês) é Kernel.spawn/1.

Novamente, o nome dela é spawn, ela faz parte do módulo Kernel e recebe um argumento.
Eu consigo fazer

Kernel.spawn(IO.puts("Adolfo"))

?
Não!

Vamos começar simplificando: toda função que faz parte do módulo Kernel não precisa do nome do módulo antes.
Basta chamar

spawn(IO.puts("Adolfo"))

Vai continuar errado mas com menos letras.
O que Kernel.spawn/1 recebe é uma função de aridade 0, ou seja, que não recebe nenhum argumento.
Como fazemos isso?
Assim:

fn -> 1 end

A função acima não tem nome (anônima) e retorna 1.

Mas veja na imagem que se você dá um spawn nela, nada de interessante acontece:

Image description

Em primeiro lugar, veja que

fn -> 1 end

retornou uma espécie de "código" que identifica a função:

#Function<43.3316493/0 in :erl_eval.expr/6>

E

spawn(fn -> 1 end)

retornou um PID, um Process IDentifier, um identificador de processo:

#PID<0.120.0>

Eu posso atribuir este PID a uma variável:

iex(1)> pid = spawn(fn -> 1 end)
#PID<0.110.0>

E depois perguntar se o processo que foi gerado está vivo:

iex(2)> Process.alive?(pid)
false

Não está pois era uma função muito rápida, que só retornava 1.
Eu posso, por exemplo, fazer o processo "dormir" por 10 segundos antes de retornar o 1.

iex(3)> pid = spawn(fn -> Process.sleep(10000); 1 end)
#PID<0.113.0>

Se rapidamente eu pergunto se o processo, cujo identificador está na variável pid, está vivo, a resposta é sim.

iex(4)> Process.alive?(pid)
true

Mas se pergunto novamente depois de 10 segundos, a resposta será não.

iex(5)> Process.alive?(pid)
false

Se eu fizer isto aqui

iex(6)> pid = spawn(fn -> Process.sleep(10000); IO.puts("Adolfo") end)
#PID<0.117.0>
Adolfo

vai demorar 10 segundos para "Adolfo" ser escrito na tela.

Já se eu fizer isto, será imediato para "Adolfo" aparecer na tela.

iex(7)> pid = spawn(fn -> IO.puts("Adolfo") end)
Adolfo
#PID<0.119.0>

Enfim, isto é somente o básico do básico. Leia mais em
https://elixirschool.com/pt/lessons/intermediate/concurrency
Ou no Getting Started da linguagem Elixir
https://elixir-lang.org/getting-started/processes.html

Fiz tudo isso sem sequer mencionar send e receive.

Finalizando: um processo em Elixir é uma unidade de processamento que executa uma função.


This content originally appeared on DEV Community and was authored by Elixir UTFPR (por Adolfo Neto)


Print Share Comment Cite Upload Translate Updates
APA

Elixir UTFPR (por Adolfo Neto) | Sciencx (2023-03-04T15:15:36+00:00) O que é um processo em Elixir?. Retrieved from https://www.scien.cx/2023/03/04/o-que-e-um-processo-em-elixir/

MLA
" » O que é um processo em Elixir?." Elixir UTFPR (por Adolfo Neto) | Sciencx - Saturday March 4, 2023, https://www.scien.cx/2023/03/04/o-que-e-um-processo-em-elixir/
HARVARD
Elixir UTFPR (por Adolfo Neto) | Sciencx Saturday March 4, 2023 » O que é um processo em Elixir?., viewed ,<https://www.scien.cx/2023/03/04/o-que-e-um-processo-em-elixir/>
VANCOUVER
Elixir UTFPR (por Adolfo Neto) | Sciencx - » O que é um processo em Elixir?. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2023/03/04/o-que-e-um-processo-em-elixir/
CHICAGO
" » O que é um processo em Elixir?." Elixir UTFPR (por Adolfo Neto) | Sciencx - Accessed . https://www.scien.cx/2023/03/04/o-que-e-um-processo-em-elixir/
IEEE
" » O que é um processo em Elixir?." Elixir UTFPR (por Adolfo Neto) | Sciencx [Online]. Available: https://www.scien.cx/2023/03/04/o-que-e-um-processo-em-elixir/. [Accessed: ]
rf:citation
» O que é um processo em Elixir? | Elixir UTFPR (por Adolfo Neto) | Sciencx | https://www.scien.cx/2023/03/04/o-que-e-um-processo-em-elixir/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.