mirror of
https://github.com/jbranchaud/til
synced 2026-01-05 16:18:01 +00:00
Add Inspecting The Process Message Queue as an elixir til
This commit is contained in:
33
elixir/inspecting-the-process-message-queue.md
Normal file
33
elixir/inspecting-the-process-message-queue.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# Inspecting The Process Message Queue
|
||||
|
||||
A core tenant of Elixir is message passing between processes. So, if a
|
||||
process is sent a message, where does that message go? What happens if it
|
||||
gets sent many messages? The `Process.info/2` function allows us to inspect
|
||||
the message queue.
|
||||
|
||||
First, let's send some messages (to ourself) and then keep an eye on the
|
||||
length of the message queue as we go.
|
||||
|
||||
```elixir
|
||||
> send self(), {:error, "this is bad"}
|
||||
{:error, "this is bad"}
|
||||
> Process.info(self(), :message_queue_len)
|
||||
{:message_queue_len, 1}
|
||||
> send self(), {:hello, "world"}
|
||||
{:hello, "world"}
|
||||
> Process.info(self(), :message_queue_len)
|
||||
{:message_queue_len, 2}
|
||||
```
|
||||
|
||||
Now, I am curious what those specific messages are. Let's ask
|
||||
`Process.info/2` for the messages that are in the message queue.
|
||||
|
||||
```
|
||||
> Process.info(self(), :messages)
|
||||
{:messages, [error: "this is bad", hello: "world"]}
|
||||
```
|
||||
|
||||
There are a lot of other things that `Process.info/2` can tell us about a
|
||||
process. See [the Erlang docs for
|
||||
`process_info`](http://erlang.org/doc/man/erlang.html#process_info-2) for
|
||||
more details.
|
||||
Reference in New Issue
Block a user