Editing Elixir Process

Jump to navigation Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

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"})
```
send(pid, {:message, "Hello"})
```


receive do
```
  {:message, content} -> IO.puts content
receive do
end
  {: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)
```
ref = Process.monitor(pid)
```


receive do
```
  {:DOWN, ref, :process, pid, reason} -> IO.puts "Process terminated: #{reason}"
receive do
end
  {: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
defmodule MyServer do
  use GenServer
  def start_link do
 
    GenServer.start_link(__MODULE__, [])
  def start_link do
  end
    GenServer.start_link(__MODULE__, [])
  end
  def init(_) do
 
    {:ok, []}
  def init(_) do
  end
    {:ok, []}
  end
  def handle_info(:ping, state) do
 
    {:noreply, state}
  def handle_info(:ping, state) do
  end
    {:noreply, state}
end
  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
defmodule MyApp.Supervisor do
  use Supervisor
  def start_link do
 
    Supervisor.start_link(__MODULE__, [])
  def start_link do
  end
    Supervisor.start_link(__MODULE__, [])
  end
  def init(_) do
 
    children = [
  def init(_) do
      worker(MyServer, [])
    children = [
    ]
      worker(MyServer, [])
    ]
    supervise(children, strategy: :one_for_one)
 
  end
    supervise(children, strategy: :one_for_one)
end
  end
end
```


=== Conclusion ===
=== Conclusion ===
Please note that all contributions to Elixir Wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see Elixir Wiki:Copyrights for details). Do not submit copyrighted work without permission!
Cancel Editing help (opens in new window)

Template used on this page: