Multithreading
Concurrent programming is a significant theme when exploring Crystal. You can create lightweight threads (known as fibers) with the spawn
method. By default, Crystal distributes work across a single CPU core using an asynchronous event loop. This is a simple and very efficient approach that relieves the programmer from dealing with thread synchronization and data races. When doing an I/O operation, only the current fiber is blocked; all others can run in the meantime. In most cases, scalability can be achieved by running multiple Crystal instances to take advantage of multiple cores. Concurrency will be discussed in greater detail in Chapter 8, Using External Libraries.
Nonetheless, there are cases when true multithreading becomes a need. For example, when working with CPU-intensive processing, having concurrent fibers isn't enough. Being able to run multiple fibers at once with parallelism is a must. For this, Crystal has an experimental flag, -Dpreview_mt
,...