Are you on Windows? Forking is mostly faked on Windows. Are you loading any modules before using threads? Threads cause all loaded code to be copied into each spawned interpreter. Did you try a simple $pid = fork() approach? There may be overhead in forks.pm due to the emulation of the threads API.