in reply to Re^8: Avoid Locking Entire Hashes
in thread Avoid Locking Entire Hashes

Indeed. I recognised that your solution is better as soon as I saw it, at laest in terms of memory usage. For short locks, it's equally slow compared to locking the whole hash, though.
>perl ikegami.pl Lock scalars ref took 1.648 seconds >perl ikegami.pl Lock scalars ref took 1.714 seconds >perl ikegami.pl Lock scalars ref took 1.702 seconds >perl browseruk.pl Lock scalars ref took 1.731 seconds >perl browseruk.pl Lock scalars ref took 1.543 seconds >perl browseruk.pl Lock scalars ref took 1.601 seconds

Replies are listed 'Best First'.
Re^10: Avoid Locking Entire Hashes
by BrowserUk (Patriarch) on Jun 15, 2011 at 07:16 UTC
    it's equally slow compared to locking the whole hash, though.

    Hm. How many cores do you have?


    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.

      Oh, you're surprised my slow results are much faster than yours. Core i7 720QM @ 1.66MHz (a quad core), 64-bit Windows 7 Pro, 32-bit ActivePerl 5.14. Here are my full hash locking figures:

      >perl a.pl Lock hash took 0.724 seconds >perl a.pl Lock hash took 0.750 seconds >perl a.pl Lock hash took 0.619 seconds
        my slow results are much faster than yours

        Yes. This is 32-bit 5.8.9 on 64-bit Vista on Core 2 Quad @2.4GHz:

        ## full hash C:\test>\perl32\bin\perl.exe 909437-1.pl Lock hash took 1.153 seconds ## refs my way C:\test>\perl32\bin\perl.exe 909437-2.pl Lock scalar ref took 3.057 seconds ## refs your way C:\test>\perl32\bin\perl.exe 909437-3.pl Lock scalars ref took 3.473 seconds

        And 64-bit 5.10.1:

        C:\test>909437-1 Lock hash took 1.189 seconds C:\test>909437-2 Lock scalar ref took 3.285 seconds C:\test>909437-3 Lock scalars ref took 3.434 seconds

        Maybe the internal semaphoring has improved substantially in 5.14? Time to consider an upgrade.

        Does 5.14 have much else to make the pain worth while?


        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.

      4. (Upd: 8 visible cores due to hyperthreading )

      I don't understand the... surprise? To be clear, that's

      # ikegami lock ${ $mutexes{$k} }; ++$hash{$k};
      vs
      # browseruk lock ${ $hash{$k} }; ++${ $hash{$k} };

      (with proper initialisation)