# Parallel Computing

Julia supports three main categories of features for concurrent and parallel programming:

1. Asynchronous "tasks", or coroutines
2. Multi-threading
3. Distributed computing

Julia Tasks allow suspending and resuming computations for I/O, event handling, producer-consumer processes, and similar patterns. Tasks can synchronize through operations like `wait` and `fetch`, and communicate via `Channel`s.

Multi-threading functionality builds on tasks by allowing them to run simultaneously on more than one thread or CPU core, sharing memory.

Finally, distributed computing runs multiple processes with separate memory spaces, potentially on different machines. This functionality is provided by the `Distributed` standard library as well as external packages like `MPI.jl` and `DistributedArrays.jl`.

Theme

This document was generated with Documenter.jl on Thursday 24 September 2020. Using Julia version 1.5.2.