Asynchronous programming can be benefitial for performance, however not all functions are written for nonblocking interaction and external processes almost never are. By forking the blocking call into a new process, the main thread may continue to run non-blocking, while the blocking call evaluates. Mojo::IOLoop::ForkCall manages the forking and will emit an event (or execute a callback) when the forked process completes. Return values are serialized and sent from the child to the parent via an appropriate pipe for your platform. Deprecated! Use Mojo::IOLoop::Subprocess instead.