© 2021 Strange Loop
Whether you're using plain old OS threads or a userspace threading model, understanding the subtleties of scheduling and how it affects parallel programs can be tricky. As systems and performance engineers, there are many questions we can ask:
Can we quantify the tradeoffs between native threads and green threads? How expensive are context switches really? How can a scheduler trade off throughput and latency? How should we evaluate scheduler performance? And what do we really mean by performance, anyways?
Let's talk about the essentials of scheduling in the Linux kernel, and then take a deep dive into the schedulers implemented in the Erlang and Go runtimes. We'll compare the design decisions they make, and get an idea of the fundamentals of scheduler design. Along the way, we'll discuss those questions, and explore how we can actually analyze scheduler behavior in action.
Eben is a software engineer with a math background, based in San Francisco. He thinks exploring software performance is cool, because it's a great proxy for understanding how systems actually work.