NAME
    "Threads::Pool" - API to get a Pool of reusable threads

SYNOPSIS
            my $pool = Threads::Pool->getInstance( [[NUMBER OF THREADS, SUB CODEREF], WAIT SECONDS] );
         or my $pool = Threads::Pool->getInstance( { [[ code => SUB CODEREF, threads => NUMBER OF THREADS ], wait =>  WAIT SECONDS ] } );
            my $same_pool_as_the_ones_before = Threads::Pool->getInstance( SUB CODEREF );
            $pool->addToTheQueue( \@array );
            $pool->destroy();

DESCRIPTION
    This class instances a pool of reusable threads, gives them a task, and
    then adds to a shared queue any $obj you want to give them to evaluate.
    Your $obj MUST be shareable ( all types but glob & coderef ), or at
    least serialized, so that you can then deserialize it inside the SUB
    CODEREF you supplied, and put in an ARRAYREF ( mandatory ) which will be
    the arg of the ->addToTheQueue() method. You must also supply the number
    of threads you want to be run inside the pool at creation time.
    Optionally you can give a wait time for the threads to wait between
    executions of the coderef, defaults to 0.3 seconds.

    You can call the pool's instance from wherever in your code, passing as
    argument always the same CODEREF, as it's a static member of this class;
    once the instance is created, every attempt to recreate it will just be
    ignored, so you need to destroy it ( via ->destroy() ) before doing it.

    The pool can't give you any assurance that all the threads will get
    their jobs finished before exiting the main program, so you MUST ensure
    that they'll have enough time to run ( if you care ). It's thus
    advisable that you destroy() the pool when you're done. Otherwise perl
    will most probably complain that you still have running threads while
    exiting ( mostly if you've got more than a pool at once in the same
    scope, as the reference are statically kept by the class itself, so that
    no automagic cleanup method will be invoked ), although the pool will do
    its best to kill them beforehand.

    Requires at least Perl 5.8.0 and the support to ithreads, with the
    presence of the threads and threads::shared modules.

METHODS
  "getInstance( [[ SUB CODEREF, NUMBER OF THREADS ], WAIT SECONDS] ) or getInstance( { [[ code =" SUB CODEREF, threads => NUMBER OF THREADS ], wait =>  WAIT SECONDS ] } )>
    This method returns the pool's instance, if already created, or creates
    it with arguments you pass;

  "addToTheQueue( $obj )"
    This method lets you add the args you want to be passed to the coderef
    by the threads. This must be an ARRAYREF to the array containing the
    args you want to be passed.

  "destroy()"
    This method destroys the pool's instance, waiting for all the threads to
    have their jobs done.

SUPPORT
    No support is available

AUTHOR
    Francesco Serra, fn.serra@gmail.com

    Copyright 2013.

