Most programs in Julia run on a single thread, on a single processor core. In other words, most processing in Julia is synchronous. But we know that a modern computer can appear to do many things in parallel. It can play music while you are writing a report, run your tests when you are typing code, or run a web server in the background. There are many layers to achieving this level of multiprocessing. In this chapter, we will look at concurrent primitives that make it possible to run parallel, or seemingly parallel operations, without the full complexities of shared memory multithreading. We will discuss how the concept of co-operative multitasking, implemented as tasks and asynchronous I/O, helps create responsive programs. The following are the topics we will cover in this chapter:
- Tasks
- Controlling tasks with the @sync and @async macros...