Parallelism with std.parallelism
Work units: parallel(range, workUnitSize). Avoid shared mutable state inside parallel bodies (or use atomics).
import std.parallelism, std.range, std.stdio, std.math;
void main()
{
auto nums = iota(1_000_000).array;
auto results = new double[](nums.length);
foreach (i, ref r; parallel(results)) // parallel foreach over the default taskPool
r = sqrt(cast(double) nums[i]);
auto squares = taskPool.amap!(x => x * x)(nums); // eager parallel map
auto total = taskPool.reduce!"a + b"(nums); // parallel reduce
auto lazyMap = taskPool.map!(x => x * 2)(nums, 1000); // lazy, buffered
auto t = task!fib(35); // future/task
taskPool.put(t);
writeln(t.yieldForce); // wait for the result
writeln(totalCPUs);
auto pool = new TaskPool(4); // custom pool
scope(exit) pool.finish();
}