Caldarale, Charles R schrieb am 29.11.2010 um 22:47 (-0600): > > From: Michael Ludwig [mailto:mil...@gmx.de] > > > can we say that: > > > (a) blocking IO requires one thread (or, in some other > > server environments, one process) per socket > > Well, sort of. The actual requirement is one thread per established > HTTP connection, where a connection is typically done using sockets. > There's no switching overhead until traffic arrives on the connection, > and the waiting thread is activated to process it. Otherwise, the > thread is stalled until either input arrives or a timeout occurs. > > > (b) non-blocking IO allows a thread or process to switch > > between sockets, thus providing scheduling and concurrency > > on just another level, possibly with advantages? > > Again, kind of. There's one thread that polls the connections for > traffic
Which is where the non-blocking comes in, because if it were blocking the thread would block on checking the connection (reading from the socket). > and when something arrives, it passes the connection off to a > request handler to do something useful with it. When the request > handling is finished, the worker thread goes back to the pool, and > control of the connection is relinquished to the polling thread. > Consequently, you only need as many threads as there are active > requests, as opposed to needing one per active (and usually idle) > connection. That makes sense. Thanks. > I suspect you'd be hard pressed to measure any switching difference > between the two (NIO may actually be slightly worse); the main > advantage of NIO is that fewer resources (threads) are tied up doing > nothing while waiting for clients to send something. -- Michael Ludwig --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org