Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -883,6 +883,61 @@ map.flatten 1.24 K - 1.94x slower +390.20 μs

À primeira vista, a seção Comparison nos mostra que a versão do nosso map.flatten é 1.94x mais lenta do que flat_map. E também mostra que, em média, é cerca de 390 microssegundos mais lento, o que coloca as coisas em perspectiva. Isso é útil saber! No entanto, vamos olhar para as outras estatísticas que temos:

## Node
No Elixir, um nó(Node) é uma instância da BEAM (máquina virtual do Erlang) com um nome único. Algumas das funções neste módulo são incorporadas pelo compilador, de forma semelhante às funções no módulo Kernel, e são explicitamente marcadas em sua documentação como "embutidas pelo compilador". Ou seja, o compilador conhece essa função como uma função especial o compilador reconhece e sabe que tem relação direta para gerar instruções no BEAM. Exemplos típicos: is_atom/1, is_list/1, Kernel.apply/2, etc. Funções embutidas podem ser mais eficientes, podem ser usadas em macros, ou podem ser avaliadas de maneira diferente pelo compilador.

### Criar um Nó Local com nome curto:
```bash
iex --sname node1 -S mix
```

1. -sname node1 define o nome curto do nó como node1.

2 . Agora você está em um nó interativo chamado node1@seu_host

Dentro do IEx você pode verificar o nó:

```bash
Node.self()
# => :node1@hostname
```

Um nó pode conter vários processos: GenServer, TaskAgent. Conectar dois nós signifca que eles se reconhecem em rede e podem trocar mensagens como se estivessem no mesmo computador. Suponha que você tenha um outro no chamado node2@hostname

```bash
Node.connect(:node2@hostname)
# => true
```
É possível estabelecer uma comunicação entre esses dois nos usando RPC: RPC permite que um programa execute uma função em outro computador ou outro nó como se fosse local.Em vez de escrever código de comunicação manual (sockets, HTTP, etc.), você simplesmente “chama a função” e o sistema cuida da transmissão da chamada e do resultado.

Supondo que no No você tenha seguinte função:

```elixir
defmodule Ping do
def hello do
IO.puts("Hello from #{Node.self()}")
end
end
```

Essa função apenas imprime um olá com o número do node

No node1, você pode chamar essa função remotamente assim:

```elixir
:rpc.call(:node2@host, Ping, :hello, [])
# Executa Ping.hello() no node2
```

RPC são bastantes úteis em contexto de alta disponibilidade e aplicações distribuidas.











Expand Down