[Python-Dev] RE: NT select.select?

Brian Lloyd Brian@digicool.com
Fri, 30 Jul 1999 14:25:01 -0400


Guido wrote:
>
> Brian,
> 
> (Also in response to your bug report.)  I'm a little worried that
> upping the limit to 1024 would cause some performance problems if
> you're making a lot of select() calls.  The select allocates three
> arrays of length FD_SETSIZE+3; each array item is 12 bytes.  This is a
> total allocation of more than 36K for a meager select() call! 
>  And all 
> that memory also has to be cleared by the FD_ZERO() call.
> 
> If you actually have that many sockets, that's worth paying for (the
> socket objects themselves use up just as much memory, and your Python
> data structures for the sockets, no matter how small, are probably
> several times bigger), but for a more typical program, I see 
> this as a 
> lot of overhead.
> 
> Is there a way that this can be done more dynamically, e.g. by making
> the set size as big as needed on windows but no bigger?
> 
> (Before you suggest allocating that memory statically, remember it's
> possible to call select from multiple threads.  Allocating 36K of
> thread-local space for each thread also doesn't sound too pleasant.)
> 
> --Guido van Rossum (home page: http://www.python.org/~guido/)

Hmm - after going through all of the Win32 sdks, it doesn't
appear to be possible to do it any other way than as a -D 
option at compile time, so optimizing for the common case
(folks who _don't_ need large numbers of fds) is reasonable.

Since we distribute a python15.dll with Zope on windows, this
isn't that big a deal for us - we can just compile in a higher
limit in our distributed dll. I was mostly thinking of the win32
users who don't have the ability to rebuild their dll, but
maybe this isn't that much of a problem; I suspect that the 
people who write significant socket apps that would run into 
this problem probably have access to a compiler if they need it.


Brian Lloyd        brian@digicool.com
Software Engineer  540.371.6909              
Digital Creations  http://www.digicool.com