Epilogue
So, you have reached the end. First of all, congratulations! You’ve come to the end of quite a journey!
We started by talking about concurrency and parallelism in Chapter 1. We even covered a bit about the history, CPUs and OSs, hardware, and interrupts. In Chapter 2, we discussed how programming languages modeled asynchronous program flow. We introduced coroutines and how stackful and stackless coroutines differ. We discussed OS threads, fibers/green threads, and callbacks and their pros and cons.
Then, in Chapter 3, we took a look at OS-backed event queues such as epoll
, kqueue
, and IOCP. We even took quite a deep dive into syscalls and cross-platform abstractions.
In Chapter 4, we hit some quite difficult terrain when implementing our own mio-like event queue using epoll. We even had to learn about the difference between edge-triggered and level-triggered events.
If Chapter 4 was somewhat rough terrain, Chapter 5 was more like climbing Mount Everest....