[Twisted-Python] Twisted scalability question
Phillip J. Eby
pje at telecommunity.com
Tue Sep 23 09:58:14 MDT 2003
At 11:58 PM 9/22/03 +0300, Matti Jagula wrote:
>So, after the rather lengthy introduction, I'd like to know what am I doing
>wrong? How can I show the better scalability of Twisted platform?
This is just a guess, but you probably aren't doing anything complicated
enough to benefit. :)
Seriously, if all you're doing is sending a single datagram in response to
a simple DB query, framework overhead will continue to dominate your
processing time. Think about the two programs: both perform the query and
send the datagram. But the non-Twisted program *does nothing else*. So,
what you're seeing is that the per-invocation framework overhead for the
Twisted version is about 3x what's required for just the db query and
datagram send. For something so simple, that actually sounds pretty
reasonable!
What Twisted (and the "reactor" pattern in general) excels at is
multiplexing *concurrent and ongoing* I/O operations. However, your
application has *no* ongoing I/O! In general, Twisted scales well because
it lets you do other things while you're waiting for I/O. With TCP
streams, you may have to wait before you write data, because the receiver
may be slow. Likewise, if you're receiving data, the sender may be
slow. While it's waiting, Twisted can let you do something else, like send
or receive data from someone else that's ready at that moment, or do some
actual computation.
However, in your setup, the *only* I/O that you ever wait for is the
database! You're receiving a single UDP packet (that you don't "wait"
for), and sending a UDP packet (that you don't need to wait to
send!). Even if you made it take 10 times longer for the DB query to run,
you'd *still* be able to send that data out as soon as you receive it.
In short, the problem you're solving is so darn simple that there's no way
using Twisted can really improve on it, except in terms of issues like
keeping your DB connection open. There's simply nothing here for Twisted
to multiplex!
More information about the Twisted-Python
mailing list