I'll confirm, and guarentee, that Perl threads are scheduled by the system scheduler and are eligible to run on all available cores unless you takes specific steps to prevent them from doing so. But then I guess you'd expect me to say that :)

I am doing something wrong?

On the basis of your description of your observations: yes. But without some idea of what you are doing, it's pretty much impossible to suggest what that might be.

If, for example, your process is cpu-bound and spends most of it's time interacting with your 1GB of shared data, and your threaded version is applying indiscriminate locks to that shared data, then you could effectively be serialising access to it and 7 of your threads spend their time waiting for the 8th thread to release the lock. That conceivably might produce the symptoms you are seeing.

By way of demonstration. The following code will show almost no benefit from the threading or multiple cores:

#! perl -slw use strict; use threads; use threads::shared; my %bighash :shared = map{ $_ => 1; } 'aaa' .. 'zzz'; sub thread { while( 1 ) { lock %bighash; 1 while each %bighash; } } my @threads = map{ threads->create( \&thread ); } 1 .. 8; $_->join for @threads;

Because all the threads are competing for a lock on the same single data structure, so only one thread will ever doing anything useful at any given time.

There are simple ways of avoiding this problem, but which is applicable depends upon what you are doing in your program.


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
"Too many [] have been sedated by an oppressive environment of political correctness and risk aversion."

In reply to Re^4: Perl Threads and multi-core CPUs by BrowserUk
in thread Perl Threads and multi-core CPUs by haidut

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.