When developing scalable and responsive applications it is essential to leverage the parallelism provided by the underlying platform. Modern server hardware can support dozens, hundreds or even thousands of cores, but coding directly against these is beyond the reach of the vast majority of developers.
In modern JVM languages like Kotlin three approaches are available for simplifying the addition of parallelism. The first is the concept of Coroutines, which became an official and integral part of the Kotlin language in version 1.3. The second is the idea of Reactive Streams, as implemented in projects like RxJava and Reactor and used in frameworks like Spring WebFlux. The third is the Pure-FP approach of Effect Systems, which exist at a higher level and can be implemented using any concurrency library. In Kotlin the leading Effect implementation is provided by Arrow.
This talk will illustrate the key differences between these approaches, by solving a sample problem via each of the three options. The costs and benefits of each approach will be outlined, enabling you to determine which is best for your current projects and which has the best long term suitability for your team.