2009/1/28 Marc Feeley feeley@iro.umontreal.ca:
David St-Hilaire was experimenting with the following program: ..... (pp n) ;; expected value of n is approximately 10000
The value printed for n on his Linux computer is approximately 100. When I try the program on my Mac OS X computer I get a value much closer to the expected 10000.
After digging around it seems that the resolution of the "timeout" parameter to the "select" system call (which is used by the scheduler to wait for I/O and/or a timeout) can vary greatly from one OS to another.
I'm curious to know how well other operating systems handle the timeout. So, if you have access to some unusual operating system, could you try the above program and report back what value is printed?
Are you sure? I'm also on OS X (10.5 on a reasonably fast x86) and I get almost exactly 100 every time for the program you pasted:
Lyrebird:sicp oisin$ gsi test-threads.scm 99 Lyrebird:sicp oisin$ gsi test-threads.scm 99 Lyrebird:sicp oisin$ gsi test-threads.scm 102 Lyrebird:sicp oisin$ gsi test-threads.scm 101 Lyrebird:sicp oisin$ gsi test-threads.scm 100
It behaves the same when compiled. So even in the same OS (unless you're on a different version of OS X?), it seems these scheduler settings can drastically alter thread performance characteristics.
I also wrote the C program below to test the resolution of select's timeout. You can try that too.
Lyrebird:sicp oisin$ time ./a.out
real 0m1.606s user 0m0.026s sys 0m0.088s
Oisín