Editing Elixir Process
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 16: | Line 16: | ||
Message passing is a key mechanism for inter-process communication in Elixir. Processes can send messages to each other using the `send/2` function and receive messages using the `receive/1` macro. Messages are asynchronous, meaning that the sender does not block waiting for a response. | Message passing is a key mechanism for inter-process communication in Elixir. Processes can send messages to each other using the `send/2` function and receive messages using the `receive/1` macro. Messages are asynchronous, meaning that the sender does not block waiting for a response. | ||
``` | |||
send(pid, {:message, "Hello"}) | |||
``` | |||
``` | |||
receive do | |||
{:message, content} -> IO.puts content | |||
end | |||
``` | |||
=== Process Monitoring === | === Process Monitoring === | ||
Elixir provides a powerful process monitoring mechanism through the `Process.monitor/1` and `Process.monitor/2` functions. Monitoring allows processes to be notified when another process crashes or terminates. This feature is crucial for building fault-tolerant systems. | Elixir provides a powerful process monitoring mechanism through the `Process.monitor/1` and `Process.monitor/2` functions. Monitoring allows processes to be notified when another process crashes or terminates. This feature is crucial for building fault-tolerant systems. | ||
``` | |||
ref = Process.monitor(pid) | |||
``` | |||
``` | |||
receive do | |||
{:DOWN, ref, :process, pid, reason} -> IO.puts "Process terminated: #{reason}" | |||
end | |||
``` | |||
=== GenServer === | === GenServer === | ||
`GenServer` is a behavior module in Elixir that simplifies the implementation of server processes. It provides a standardized API for handling messages, state management, and error handling. GenServers are widely used in Elixir applications to encapsulate business logic and manage state. | `GenServer` is a behavior module in Elixir that simplifies the implementation of server processes. It provides a standardized API for handling messages, state management, and error handling. GenServers are widely used in Elixir applications to encapsulate business logic and manage state. | ||
``` | |||
defmodule MyServer do | |||
use GenServer | |||
def start_link do | |||
GenServer.start_link(__MODULE__, []) | |||
end | |||
def init(_) do | |||
{:ok, []} | |||
end | |||
def handle_info(:ping, state) do | |||
{:noreply, state} | |||
end | |||
end | |||
``` | |||
=== Supervision === | === Supervision === | ||
Supervision is a powerful concept in Elixir that allows building fault-tolerant systems. With supervision, processes can be organized into supervision trees, where each process is supervised by another process. If a supervised process crashes, the supervisor can take appropriate actions such as restarting the process. This ensures the system remains resilient and operational even in the face of failures. | Supervision is a powerful concept in Elixir that allows building fault-tolerant systems. With supervision, processes can be organized into supervision trees, where each process is supervised by another process. If a supervised process crashes, the supervisor can take appropriate actions such as restarting the process. This ensures the system remains resilient and operational even in the face of failures. | ||
``` | |||
defmodule MyApp.Supervisor do | |||
use Supervisor | |||
def start_link do | |||
Supervisor.start_link(__MODULE__, []) | |||
end | |||
def init(_) do | |||
children = [ | |||
worker(MyServer, []) | |||
] | |||
supervise(children, strategy: :one_for_one) | |||
end | |||
end | |||
``` | |||
=== Conclusion === | === Conclusion === |