Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use full processing power with perl

I have a perl script which is running correct but it is only using 1 core of my 2 core CPU, how can i make it utilise all cores.

I know that i can create threads using threads->new(); but how do i fit that into something like:

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

where the subroutine is being called by something else.

like image 492
fir3x Avatar asked Feb 12 '26 11:02

fir3x


2 Answers

The standard approach with Perl is to not try to use multiple cores with one invocation of the script, but instead to run jobs in parallel on separate cores.

Yes, you can use threading with Perl, but Perl's threading is (very) heavyweight. To avoid potential race conditions, when you spawn a thread Perl simply copies everything that it does not want to explicitly share. Therefore using threading is likely to be much slower than not.

like image 168
btilly Avatar answered Feb 15 '26 12:02

btilly


You would need to modify the code of XML::Twig. There is no canned answer of what would need to be done. if you find yourself having to run this script for multiple files, a better and very simple option, is to write your script so it can run for more than 1 file at the same time. You could do that with threads or you could do that with a wrapper script that executes 2 copies of your script at the same time (perhaps with xargs?).

like image 35
frankc Avatar answered Feb 15 '26 12:02

frankc



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!