Ваш сценарий на самом деле все делает? Например, если вы вычислите набор Мандельброта, у вас будут циклы, которые потребляют ЦП, но постоянно обрабатывают данные.
Или у вас есть циклы, где вы ожидаете обработки дополнительных данных:
while(1) {
process_data() if data_ready();
}
В первом случае установка приоритета, вероятно, является лучшим решением. Это замедлит вычисления, но только настолько, насколько это необходимо для обслуживания любых других процессов в системе.
Во втором случае вы можете радикально улучшить загрузку ЦП, спя всего за доли секунды.
while(1) {
process_data() if data_ready();
select( undef, undef, undef, 0.1 );
}
Если вы извлекаете данные из источника, с которым select
может работать, тем лучше. Вы можете сделать так, чтобы ваш цикл блокировался до тех пор, пока данные не будут готовы.
use IO::Select;
my $s = IO::Select->new($handle);
while(1) {
process_data() if $s->can_read;
}
Select работает с сокетами и дескрипторами файлов в * системах NIX. В системах Windows вы можете выбирать только для сокетов.