To make the development of efficient multi-core applications easier,
libraries, such as Grand Central Dispatch, have been proposed. When using such
a library, the programmer writes so-called blocks, which are chunks of codes,
and dispatches them, using synchronous or asynchronous calls, to several types
of waiting queues. A scheduler is then responsible for dispatching those blocks
on the available cores. Blocks can synchronize via a global memory.