The Thread Model
The thread model of multiprocessing was first
introduced to Perl as an experimental feature in version 5.005. (By
"thread model", we mean threads that share data resources by default,
not the new ithreads of version 5.6.) In some senses, this thread
model is still an experimental feature even in 5.6, because Perl is a
rich language and multithreading can make a muddle of even the
simplest language. There are still various nooks and crannies of Perl
semantics that don't interact very well with the notion of everything
being shared. The new ithreads model is an attempt to bypass these
problems, and at some future point, the current thread model may be
subsumed under the ithread model (when we get an interface to ithreads
that says "share everything you can by default"). But despite its
warts, the current "experimental" thread model continues to be useful
in many real-world situations where the only alternative to being a
guinea pig is even less desirable. Reasonably robust applications can
be written in threaded Perl, but you have to be very careful. You
should at least consider using fork
instead, if you
can think of a way to solve your problem with pipes instead of shared
data structures.
But some algorithms are easier to express if multiple tasks have easy and efficient access to the same pool of data.[2] This makes for code that can be smaller and simpler. And because the kernel does not have to copy page tables for data (even if doing copy-on-write) at thread ...
Get Programming Perl, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.