in reply to Re^4: Isolating dynamically loaded modules with Thread::Isolate.
in thread Isolating dynamically loaded modules with Thread::Isolate.
It's slow, uses a ton of memory
The following code spawns 100 threads in under 2 seconds and uses < 40MB?
>perl -Mthreads -le"print time;@t=map{threads->new(sub{sleep 300})}1.. +100;print time;<>" 1107144770 1107144772
I agree they aren't doing much, and that is probably considerably slower than you can spawn 100 processes--but if you need the parent to communicate with the children and vice versa, then you'd need to a lot more work using fork.
It is true that there are some inconvenient restrictions (some of which could be alleviated), and you do have to learn a few simple techniques for getting the best from them--like not loading anything you don't want shared before you spawn your threads--but they are stable and very usable.
On Win32, they are infinitely preferable to fork, but I realise that that is a restriction of the platform. I can well see why anyone on unix wouldn't bother with them unless they really needed bi-directional communications.
I agree that the implementation is imperfect, but having spent a little time looking into the work that they are doign, I think teh guys that got them to where they are are did an brillaint job given the task they faced.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^6: Isolating dynamically loaded modules with Thread::Isolate.
by perrin (Chancellor) on Feb 01, 2005 at 01:31 UTC | |
by BrowserUk (Patriarch) on Feb 01, 2005 at 01:59 UTC |