Go vs Elixir: A concurrency comparison

A bit more beginner-oriented than I expected; a couple of notes:

  • Actor processes can talk to each other directly; every process has an identity.
  • CSP processes can only talk to each other via channels, every process is effectively anonymous.
  • Goroutines can share memory? (Really?)
  • Elixir uses preemptible scheduling, Go uses co-operative scheduling.
  • There’s no built-in way for Go to supervise goroutines (to be notified when a child process crashes, for example).


  • Where specifically does Go insert markers for preemption to occur?
  • How all-encompassing is Elixir preemptible scheduler? Is it able to force a context-switch at any time? During IO?