Re: Why POE is slower then Python - Twisted ... quite a lot?

Rocco Caputo <[email protected]>
Newsgroups gmane.comp.lang.perl.poe
Message-ID <[email protected]>
I have a few issues with the way the benchmarks are run, and then some  
actual useful comments. :)

time(1) includes Perl & Python startup/shutdown time, which may be  
significant.

Your times seem to be wall clock based, which can vary based on system  
load, network conditions, and so on.  Show the CPU times instead.

It appears that you've only run one iteration.  Benchmarks should be  
run enough times to account for statistical variance.

Ok, that said:

A deep and accurate answer requires a deep knowledge of all  
technologies involved.  I'm not familiar with Python and Twisted, so I  
can't make a good comparison by myself.

A previous reply on this thread suggested that CORE::select() was  
taking the most time, which strongly implies that POE spends more time  
waiting for network activity than Twisted does.

If that's the case, it may be that POE may be checking for I/O faster  
than Twisted, and therefore more often, which could result in more and  
smaller reads from the socket.  The overhead per read will be higher,  
although the reads will be more timely.

Someone with dual Perl/Python and POE/Twisted experience would be best  
to dig into this to find the actual cause.  We can then act on that,  
rather than on conjecture.

Since the cause is likely to be within POE's implementation, we have  
room for improvement.  For example, it's been suggested on  
irc.perl.org #poe to make POE's I/O events latency tunable.  An  
interactive application might choose better responsiveness, while a  
bulk transfer application (such as yours?) could be tuned for higher  
throughput.  It's an interesting idea, but I don't have resources to  
pursue it.  If someone else does, I'll be happy to provide advice and  
guidance, here, in private e-mail, or on IRC.

-- 
Rocco Caputo - [email protected]



On Mar 23, 2009, at 07:18, howard chen wrote:

> I have 2 simple scripts which connect to NNTP server to fetch 100
> articles (no writing to local disk) in order to test the performance
> of two frameworks.
>
> I have found Twisted is faster by at least 2 times which make me  
> surprised.
>
> I know it is not fair to compare two frameworks by this simple test.
> But I think 2 times is quite much.
>
> Therefore, I upload the code online to see if any experts can find  
> any problem?
>
>
> Thanks.
>
> http://howachen.googlepages.com/nntp.py
> http://howachen.googlepages.com/nntp.pl
>
>
>>> time python nntp.py news.microsoft.com microsoft.public.access  
>>> access.mbox
>
> 18 sec
>
>>> time perl nntp.pl
>
> 37 sec
>
>
> Any comments?
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.