In this chapter, we have learned about the core fundamentals of multithreaded and asynchronous programming. The chapter starts with the basic differences between both and walks you through some core concepts about multithreading, what APIs there are available, and how to write multithreading applications. We also looked at how the task-programming library can be used to serve asynchronous operations and how to implement the task asynchronous pattern. Finally, we explored parallel programming techniques and some of the best design patterns that are used for these techniques.
In the next chapter, we will explore the types of data structures and their impact on performance, how to write optimized code, and some best practices.