Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:
Hello Monks,
I was hoping someone could enlighten me. Could someone please tell me what the advantage of using the Thread module over the Parallel Forkmanager module? I guess the real question is, in what cases would I using forking over threads?
Thanks in advance!
Re: Threads or Forking?
by cmeyer (Pilgrim) on Jul 29, 2005 at 00:10 UTC
|
If you would like to share large amounts of read-only memory between the processes (read: threads or processes), then fork is your choice. Perl's ithreads implementation doesn't support truly shared memory, or COW (copy-on-write) shared memory.
On the other hand, if you want to share large amounts of read-write memory, or if you want to share objects between the processes, then there is no reasonable option that I am aware of. The best option that I've found for communicating complex data structures between processes is serializing the data and printing it over a socket or pipe. The best option for sharing objects may be SOAP, RPC::PlServer, or something similarly obnoxious (or beautiful, depending on your point of view).
I would love to learn that I am wrong about this.
-Colin.
WHITEPAGES.COM | INC
| [reply] |
|
| [reply] [d/l] |
Re: Threads or Forking?
by japh (Friar) on Jul 29, 2005 at 01:46 UTC
|
| [reply] |
|
..although forking CAN be cheap in certain conditions. Often an OS will pretend to make a copy of the memory used by the 1st application, but won't ACTUALLY make a copy until that copy needs to change. Which is pretty clever I think!
| [reply] |
|
On modern OSses, you know, those OSses modern enough to support threads, a fork copies the memory space of program as COW (Copy On Write) - space for copies of the pages in memory are claimed, but the pages aren't copied yet. They will only be copied if either the parent, or the child writes to that page.
| [reply] |
|
But remember this. Read-only at the Perl level does not mean read-only at the C-level.
With COW, If you use a read-only variable, that is a number read from a file, in a calculation, the IV or NV field of that variable will be written to and the 4k page containing that scalar will have to be copied.
If you take a reference to a read-only scalar, the flags field in that scalar will be updated and the 4k page will be copied.
And there are a dozen or so other flags and fields that can be modifed as a result of Perl-level read accesses to a scalar, hash or array that will cause pages to be copied.
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
"Science is about questioning the status quo. Questioning authority".
The "good enough" maybe good enough for the now, and perfection maybe unobtainable, but that should not preclude us from striving for perfection, when time, circumstance or desire allow.
| [reply] |
|
| [reply] |
Re: Threads or Forking?
by xdg (Monsignor) on Jul 29, 2005 at 02:00 UTC
|
| [reply] |
|
And when you've read that, read this subthread and then make your own mind up on the basis rational discussion rather than dogma.
I guess the real question is, in what cases would I using forking over threads?
The first thing you need to realise is that, whilst there is some overlap in potential application, forks and threads are different--each having it's streangths and weakness. Learning about those differences, and considering your application in light of them will save you much time and pain.
BTW. The Thread module is obsolete unless you using an old version of Perl. If you are considering threads, then you need to look at and use threads.
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
"Science is about questioning the status quo. Questioning authority".
The "good enough" maybe good enough for the now, and perfection maybe unobtainable, but that should not preclude us from striving for perfection, when time, circumstance or desire allow.
| [reply] |
Re: Threads or Forking?
by zentara (Cardinal) on Jul 29, 2005 at 12:27 UTC
|
| [reply] |
|
|