In this chapter, we learned about the building blocks of concurrency in Scala. It was fascinating to understand the underlying blocks of concurrency in OS and JVM. We learned the difference between processes and threads. We discussed ExecutionContext and why we need one. Then, we talked about asynchronous programming using Future and Promises. Finally, we discussed parallel collections in Scala.
In our next chapter, we'll be discussing another important and much talked about reactive programming abstraction available in Scala. We'll go through the reactive extensions available in Scala.