Я не использую Perl, но, говоря с точки зрения общего асинхронного программирования, вам нужен менеджер пула потоков, который не забивает основной поток, и это можно сделать несколькими способами.Во-первых, вы можете выделить поток (ууу!) Для выполнения чего-то подобного (псевдокод):
while program not terminating:
wait a quarter-second or so, then
do your "are-there-enough-threads" check
ОС или ваша абстрактная библиотека времени выполнения, как правило, предоставляют некоторую функцию ожиданиякоторый останавливает поток до тех пор, пока не пройдет определенное время (таким образом, не занимая ресурсы планировщика в течение этого времени).
В качестве альтернативы, если ваша программа управляется событиями (как в среде графического интерфейса), вы можетеаналогичное управление пулом вне основного потока путем публикации собственных сообщений таймера, что является другой услугой, обычно предоставляемой ОС.