active_send_mail = 0 threshold = 20 for (each email in the list) { send_email(address, content) # make sure we don't fork too many processes active_send_mail = active_send_mail + 1 if (active_send_mail >= threshold) { waitpid -1 active_send_mail -- report on status } } sub send_email { fork if child { send_the_email using mail or Net::SMTP exit } # in parent return child pid }