Sure thing. I'm running on a P4 with Linux 2.4.9. Here's a simple test I tried, using perl 5.8.4:
# which threading model do we want?
use threads;
#use forks;
$num_threads = shift(@ARGV) || 10;
foreach (0..$num_threads-1) {
# create a new thread
push(@threads,threads->new(\&thread_sub));
}
foreach $thread (@threads) {
# wait for threads to finish
$thread->join();
}
printf "Orig thread done\n";
sub thread_sub {
printf "Thread %d started\n",threads->tid();
}
When I run time on a series of runs with threads.pm/forks.pm, I can't tell how much cpu time forks.pm really uses because I only get the cpu time of the parent (working on that), but I the average page faults looks like this:
threads.pm:
Major (requiring I/O) page faults: 387.00
Minor (reclaiming a frame) page faults: 1151.20
forks.pm:
Major (requiring I/O) page faults: 470.00
Minor (reclaiming a frame) page faults: 4591.20
Wall clock time, for what that's worth (these are all run on the same machine), is consistently 4x for forks vs threads.
|