All I/O in Julia is built on top of libuv, an abstraction library originally built for use with Node.js. As we said earlier, this allows Julia to use a high-quality, OS-independent library for all I/O. Reading and writing to and from disks, networks, and terminals are all handled within it.
As a library built for Node.js, it is not a surprise that the libuv API is built around asynchronous I/O. However, Julia's task system makes it much easier to use from Julia. You do not have to write callback functions to handle return values from I/O calls. The code you write appears to be synchronous, straight-line code. Under the hood, the calls are made in a non-blocking manner. Not only is the current task yielded to allow other Julia code to run; all I/O is multiplexed onto a separate operating system thread, thereby allowing multiple I/O tasks to operate...