[Python-Dev] Reworking the GIL

Sturla Molden sturla at molden.no
Mon Nov 2 15:40:43 CET 2009


Sturla Molden skrev:
>
> And just so you don't ask: There should not just be a Sleep(0) in the 
> loop, but a sleep that gets shorter and shorter until a lower 
> threshold is reached, where it skips to Sleep(0). That way we avoid 
> hammering om WaitForMultipleObjects and QueryPerformanceCounter more 
> than we need. And for all that to work better than just giving a 
> timeout to WaitForMultipleObjects, we need the multimedia timer turned 
> on.

The important thing about multimedia timer is that the granularity of 
Sleep() and WaitForMultipleObjects() by default is "10 ms or at most 20 
ms". But if we call

timeBeginPeriod(1);

the MM timer is on and granularity becomes 1 ms or at most 2 ms. But we 
can get even more precise than that by hammering on Sleep(0) for 
timeouts less than 2 ms. We can get typical granularity in the order of 
10 µs, with the occational 100 µs now and then. I know this because I 
was using Windows 2000 to generate TTL signals on the LPT port some 
years ago, and watched them on the oscilloscope.

~ 15 ms granularity is Windows default. But that is brain dead.

By the way Antoine, if you think granularity of 1-2 ms is sufficient, 
i.e. no need for µs precision, then just calling timeBeginPeriod(1) will 
be sufficient.

Sturla



 






More information about the Python-Dev mailing list