Similarity between Temporal workflow and GenServer in Erlang/Elixir

This is not a question, just some personal observations.

I happened to be learning Elixir recently, and I found a striking similarity between a Temporal workflow and a GenServer:

  • Sending a signal to workflow is equivalent to GenServer.cast, which updates the server state asynchronously with no return value
  • Sending an update to a workflow is equivalent to GenServer.call, which updates the server state synchronously, then returns a value
  • Access to a workflow is serialized – the workflow only processes one signal/update at a time, similar to an Erlang/Elixir process

Is this why signals and updates are collectively known as “workflow message passing”? It feels like Temporal manages to bring an Actor framework to languages that don’t natively support them, which is incredible.

1 Like