Interpreter change

Ian Piumarta piumarta at speakeasy.net
Mon Apr 17 22:04:09 UTC 2006


On Apr 17, 2006, at 2:56 PM, John M McIntosh wrote:

> However now I see that this has changed to:
>
> 	if (!aioPoll(0)) {
> 		  struct timespec rqtp= { 0, realTimeToWait * 1000*1000 };
> 		  struct timespec rmtp;
> 		  while ((nanosleep(&rqtp, &rmtp) < 0) && (errno == EINTR))
> 			rqtp= rmtp;
> 	}
>
> so why the change not to have the select() do the sleep?

Because select() cannot guarantee granularity of less than a  
timeslice once it has decided to go to sleep (hence the test just  
above that code for ms < timeslice quantum).  You were sitting in my  
office when we proved this.

> what are the conditions that would cause aioPoll() to return 0

No pending i/o activity on any open descriptors.

> and if the nanosleep is invoked, would 16 ms pass before servicing  
> a socket? if realTimeToWait is 16ms?

Not necessarily.  If your kernel is clever enough to return early  
from nanosleep when a signal is delivered then socket i/o will have  
minimum latency.  (On OSX this appears to be the case: nanosleep can  
return -1 and set errno to EINTR.)

Cheers,
Ian




More information about the Vm-dev mailing list