<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
</style>
</head>
<body class='hmmessage'>
 > - Start child process <BR> > - Call Process.Wait, which... <BR> > - Calls Thread.Pause(somesmallnumber) <BR><BR>
There is a call to waitpid before the Thread.Pause.<BR>
If the process finishes /very/ quickly, probably never happens, no pause/sleep.<BR>
<BR>> There are no runnable threads, so the runtime yields the processor. <BR>> I think it calls Unix's sleep?<BR>
 <BR>
Agreed probably no runnable threads typically and sleep().<BR>
Perhaps the scheduler knows that none of the threads will become runnable,<BR>
but I doubt it.<BR>
<BR> > The OS scheduler then schedules the process at a very low priority. <BR> > In most OSes, processes waiting for I/O have the highest priority, <BR> > and processes sleeping have the lowest. So you've gone from waiting <BR> > for a process to exit, at high priority, to sleeping, at very low <BR> > priority. The OS then takes its time to get around to waking you <BR> > up again. <BR>
 <BR>
Hm. Why does sleep() imply anything about priority?<BR>
Why doesn't it mean "don't run at all for a certain duration,<BR>
and then when the duration elapses, resume running ASAP,<BR>
with the same priority as it has before sleeping"?<BR>
 <BR>
Surely "not running at all for a certain duration" does not mean "low priority"?<BR>
 <BR>
There is a problem -- it will wait the entire duration, even if the process<BR>
exists half way through.<BR>
 <BR>
> Getting rid of the Thread.Pause speeds things up substantially :-)<BR><BR>
But it can also cause damage.<BR>
If there is a dependency between the child process and other parent threads.<BR>
Often there is not, sometimes there is.<BR>
 <BR>
 - Jay<BR></body>
</html>