Summary
In this chapter, we started by looking at light-weight threads and forkIO. Closely related to this, we looked at mutable references IORef and MVar in concurrent settings. Atomic operations on those reference types were quite limited, which is why we next dived into STM for arbitrarily complex transactions. Then we considered a nice higher-level abstraction over an asynchronous program, the Async API. One of the main benefits of using Async is easy and automatic cancellation of asynchronous jobs. Finally, we lifted concurrency operations into complex monad stacks.
In the next chapter, we will take a deeper look at the Runtime System, scheduling, and garbage collection. We will look at what options there are to tweak both the compiler and ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access