>There is only one select() call (or whatever) at any given time, regardless of 
>how many timers.

Yes, I do understand this.

>Syscalls are thus O(1). Timers are stored in sorted order. When event loop 
>wakes up it removes timers that have been reached, which is fast because 
>they're sorted so when you hit one that is still in future you can stop. So 
>that's pretty scalable.

syscalls are O(1). But the constant is non zero. A syscall is still quite 
expensive. try doing 1 mio. syscalls/sec on any x86 box (Linux, BSD, whatever). 
DEC Alphas and Itanium might be able to do more, but the context switching 
overhead of x86 architecture is "huge".

But I feel I failed in formulating what I am asking.

Could you please correct where my thinking below goes wrong?

Let's say I issue 1 mio. timers with expirary times t0, t0+1us, t0+2us, .., 
t0+1s

That is 1 mio. timers expiring in 1us pitch within 1s.

That will mean 1 mio. select() syscalls done in 1s each with timeout set to 1us

Since it's unlikely that a box supports a rate of 1 mio. syscalls/sec, that 
means a select with timeout 1us won't return after 1us, but >1us. Twisted will 
process all timers that have expired in the meantime. But there is no way of 
letting 1 mio. timers fire in 1us pitch within 1s using a syscall.

What I am after is to explicitly _control_ the maximum syscall rate to select() 
- not simply max. out the box on syscall rate.

Like: limit syscall rate to select() at 1000Hz - regardless how many timers I 
issue per second.

In above example, with syscall max set to 1000Hz, each time select() returns 
1000 timers would have expired. That's fine. That's what I want.

How can I do that?

Thanks!
Tobias


_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to