http://www.perlmonks.org?node_id=966949


in reply to Perl Threads Boss/Worker Example

It seems You are mixing old-style and deprecated threads model(Thread module) with the new ithreads thread model (threads module). Creating the threads should be done like this:

$thread = threads->create( \&do_stuff, param1, $param2 );

Please also note that indirect object notation like new Class is discouraged in Modern Perl in favor of Class->new.

If You do care about worker threads finishing their jobs You should use join() instead of detach() so You don't need the second while loop. Please see the perlthrtut for a more thorough explanation.

Please give the Perl version and OS You are running this, so the monks here can suggest better alternatives to Your current code.

You can also find valuable information regarding threads programming in Perl from fellow monks BrowserUk, ikegami, zentara.

Looking forward to Your reply!

Replies are listed 'Best First'.
Re^2: Perl Threads Boss/Worker Example
by joemaniaci (Sexton) on Apr 24, 2012 at 22:11 UTC

    Windows 7, whatever the latest Strawberry perl is.

    The reason I didn't do join was because I wasn't returning anything and it behaved in a non-parallel manner since I had to wait for the joined thread to return before I could start another thread. Unless I of course did something very wrong. My goal was parallelization and so far so good. I just attempted 450 files with 450 threads trying to tax my work computer. Maybe I can request an SSD at work since I think syscalls for read/write is what is the slowest part of my program now.

    I will however look into the more modern code, see how it behaves