in reply to dynamic number of threads based on CPU utilization

I would use Time::HiRes and start putting time counters in worker*() subs. "$OUTFILE" is being used by multiple threads. I dont know how bad the performance will be of using $OUTFILE from multiple threads but it doesn't look good. Regarding shared variables. They are implemented by locks, and a "master" central variable in a secret ithread/interp.

If you can not reduce the number of reads and writes or rethink your algorithm/use of threads at all (other suggestions in this thread), I suggest outright *locking* %similar for duration of "foreach my $odom(keys %similar) {" loop in simAlg, or locking %similar and then copying %similar to a my %local_similar and doing the loop on %local_similar, copy %local_similar back to %similar and release the lock on %similar. If your algorithm needs allow, you could copy %similar to %local_similar and never look at %similar for the rest of the job item.
  • Comment on Re: dynamic number of threads based on CPU utilization