We learned a lot in this chapter about multiprocessing and multiple cores. Specifically, we understood the performance waterfall in a computing system. We acknowledged the advantages of parallel programming with C# for the coming years. We learned the challenges associated with parallel processing and programming. Now, we are able to detect bottlenecks and prepare for scalability and efficient load balancing.
Now that we've learned about the principles of multiprocessing and multiple cores, we're ready to learn the main components of a parallel program, the processes and the threads, which is the topic of the next chapter.