Elixir processes are isolated, lightweight threads of execution that communicate by message passing. Each process has its own mailbox to receive messages and state to maintain as it processes messages. Messages can be sent either asynchronously with no reply expected, or synchronously to request a response. If a process does not respond within a specified time, the calling process will continue execution according to how it is programmed to handle non-responses. Processes may have multiple messages in their mailbox that are processed sequentially and can change state based on the messages received. If a process dies unexpectedly, it notifies its supervisor which decides how to handle the failure based on the restart strategy.