Perl-скрипты, загружающие процессор - PullRequest
0 голосов
/ 12 декабря 2010

Я запускаю несколько экземпляров скрипта, и все работает нормально. Каждый терминал, который я загружаю, поднимает процессор выше.

Я использую 12 экземпляров и блокирую 99% двухъядерного процессора. Я полностью сложил свой оперативной памяти 8 ГБ DDR3. В какой-то момент во время проекта я использовал mysql, но обнаружил там узкие места и некоторую случайную ошибку разъединения (которая, по словам гугла, могла быть сетевым адаптером).

В любом случае ... Так что запись на диск была намного быстрее прямо из оболочки. Используемый модуль WWW: Mechanize

Насколько известно, профиль не ужасен. Отскок вверх до 24%. Но при выполнении 8 или 9 окон терминала я достигаю предела в 100% нагрузки. Скорее всего, это результат пропускной способности и просто времени загрузки. Могу ли я вообще это ускорить? Допустим, прекратить загрузку после количества килобайт?

Спасибо, Питер

Ответы [ 2 ]

1 голос
/ 13 декабря 2010

Но я достигаю предела в исполнении 100% нагрузка с 8 или 9 окон терминала работает .. скорее всего это результат пропускной способности и просто время загрузки ..

Умм ... Нет. Если вы столкнетесь со стеной из-за ограничений пропускной способности / времени загрузки, тогда ваши процессы будут блокироваться при вводе-выводе (состояние процесса D в top / ps) и эффективно переходят к спит, потребляя циклы практически без ЦП, пока не завершится запрос ввода / вывода.

Что касается вашей текущей проблемы, то невозможно сказать без подробностей о том, что делает ваш код, в идеале включая исходный код, но общего описания ваших алгоритмов вполне может быть достаточно.

Однако обратите внимание, что при 8 или 9 запущенных процессах вы гарантированно привязываете ЦП к 100%, если в среднем для одного экземпляра загрузка ЦП превышает 11-12%. Вы ничего не сказали о среднем потреблении ЦП на процесс, но, если оно регулярно откачивается до 24%, я бы не удивился, обнаружив, что оно в среднем вдвое меньше или выше.

0 голосов
/ 12 декабря 2010

К сожалению, я не верю, что есть способ повлиять на поведение интерпретатора perl таким образом.Вы можете установить ограничения cpu для всех ваших сценариев perl на вашем компьютере, но, насколько я знаю, в perl нет способа сделать это, поскольку интерпретатор самостоятельно управляет всем выделением памяти и т. Д.

Возможно, вы захотите проверить эту ссылку: Как ограничить использование процессора в perl

Также вы можете захотеть посмотреть на потоки perl, поскольку это определенно будет более эффективным, чем запуск интерпретатора19 раз.

...