Using fibers to complete work concurrently
A fiber represents a chunk of work that should be executed, either concurrently with other fibers, or at some point in the future when there are some free cycles. They are similar to operating system threads, but are more lightweight and are managed internally by Crystal. Before we dive too deep, it is important to mention that concurrency is not the same thing as parallelism, but they are related.
In concurrent code, a little bit of time is spent on various chunks of work, with only a piece of work being executed at a given time. On the other hand, parallel code allows for multiple chunks of work to be executed at the same time. What this means in practice is that, by default, only one fiber is executed at a time. Crystal does have support for parallelism that would allow for more than one fiber to be executed at once, but it is still considered experimental. Because of that, we are going to focus on concurrency.
We have already been...