Используйте полную вычислительную мощность с Perl - PullRequest
3 голосов
/ 16 февраля 2011

У меня есть скрипт на Perl, который работает правильно, но он использует только одно ядро ​​моего двухъядерного процессора, как я могу заставить его использовать все ядра.

Я знаю, что могу создавать потоки, используя потоки.> новый ();но как мне вписать это во что-то вроде:

my $twig= new XML::Twig::XPath(TwigRoots => {TrdCaptRpt => \&top_level});
$twig->parsefile($file);

, где подпрограмма вызывается чем-то другим.

Ответы [ 2 ]

6 голосов
/ 16 февраля 2011

Стандартный подход в Perl - не пытаться использовать несколько ядер одним вызовом сценария, а вместо этого запускать задания параллельно на разных ядрах.

Да, вы можете использовать многопоточность с Perl, но многопотоковость Perl (очень) тяжелая. Чтобы избежать потенциальных условий гонки, когда вы создаете поток, Perl просто копирует все, что он не хочет явно разделять. Поэтому использование многопоточности будет намного медленнее, чем нет.

3 голосов
/ 16 февраля 2011

Вам необходимо изменить код XML :: Twig.Не существует готового ответа о том, что должно быть сделано.если вам нужно запустить этот скрипт для нескольких файлов, лучше и проще всего написать свой скрипт, чтобы он мог работать одновременно для более чем одного файла.Вы можете сделать это с потоками, или вы можете сделать это с помощью скрипта-обертки, который выполняет 2 копии вашего скрипта одновременно (возможно, с помощью xargs?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...