After initialization, call run(). This is the same as initThreadPool
using Thread.getCpuCount
to determine the thread pool size. TODO copy elision / named return values so that the threads referencing *Loop have the correct pointer value. https://github.com/ziglang/zig/issues/2761 and https://github.com/ziglang/zig/issues/2765