Shared scalars, arrays, and hashes are indeed shared, but via tied proxy mechanism. The actual data resides in a shared Perl interpretter context; the usual tie() operations then route all reads/writes (and various metadata operations) to execute against the shared interpretter's version of the
variables. Note that, for scalars, the shared value does get copied into the
private proxy on read().
I can't say precisely why your example doesn't grow significantly, except
that the array tie() operations won't populate the private proxy copy
in each thread, instead routing directly to the shared interpretter's version of the array. So in your example, the private @a never grows, only the shared version.
Note that if you were vivifying individual shared scalars, you likely would see some significant memory growth, since there would be a copy in both the
originating thread, and in the shared interpretter.
Also note that the shared interpretter is one of the major bottlenecks in ithreads: as you might imagine, a Perl interpretter context holds a lot of state, thus concurrent access requires a major lock on the whole thing...which unfortunately can create a lot of thread contention.
Perl Contrarian & SQL fanboy
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
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:
Outside of code tags, you may need to use entities for some characters:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, 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, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.
| & || & |
| < || < |
| > || > |
| [ || [ |
| ] || ] ||