On Tue, 2009-03-24 at 10:05 +0900, Daisuke Maki wrote: > I'm going to take a wild guess here: POE::Component::Pluggable.
Nope, that isn't it. I would have found that surprising anyway, since there aren't any plugins being used, so it's just a few checks if there are any plugins. (I checked by disabling the plugin handling) I thought maybe it had something to do with twisted running a more efficient loop by default, so I tried with some alternate loops (EV, POE::Loop::XS::EPoll), but that doesn't make much of a difference either Then I thought maybe it's the fact that Client::NNTP uses Filter::Line, so there's an event dispatched for each line of message instead of just one per message. While hacking up Client::NNTP to use Filter::Stream instead reduced the number of _invoke_state calls from almost 6000 to slightly over a thousand, that still only shaves off a few seconds of runtime. Devel::NYTProf says most of the time is being spent in CORE::select in loop_do_timeslice for the select loop or in EV::loop() for the EV loop (and not much difference between the two). I'm not an expert on POE internals, nor familiar with Twisted, so I can't say if it's just because Twisted does less than POE, or that there's something that could be optimised. Martijn
