You are viewing a plain text version of this content. The canonical link for it is here.
Posted to httpclient-users@hc.apache.org by Oleg Kalnichevski <ol...@apache.org> on 2010/03/13 17:59:36 UTC

Classic I/O vs NIO comparison; was Re: How to do cookies with NHttp*?

Ken Krugler wrote:
> Hi Todor,
> 

...

> 
> I was hoping it might be related to nio vs. threaded approaches to HTTP 
> handling.
> 
> There's been a lot of debate about the value (performance, simplicity, 
> resource consumption) but I haven't seen much head-to-head comparison 
> where the rest of the implementation is roughly comparable. If you ever 
> get any comparison numbers, I'd love to see them.
> 
> -- Ken
> 

I have made a number of tests comparing HttpCore blocking vs HttpCore 
NIO vs Jetty blocking vs Jetty NIO. The results and the link to the 
source code can be found here:

http://wiki.apache.org/HttpComponents/HttpCoreBenchmark

Oleg



---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org


Re: Classic I/O vs NIO comparison; was Re: How to do cookies with NHttp*?

Posted by Todor Boev <ri...@gmail.com>.
On 14.03.2010 16:29, Oleg Kalnichevski wrote:
> Todor Boev wrote:
>> On 13.03.2010 18:59, Oleg Kalnichevski wrote:
>>> Ken Krugler wrote:
>>>> Hi Todor,
>>>>
>>> ...
>>>
>>>> I was hoping it might be related to nio vs. threaded approaches to
>>>> HTTP handling.
>>>>
>>>> There's been a lot of debate about the value (performance, simplicity,
>>>> resource consumption) but I haven't seen much head-to-head comparison
>>>> where the rest of the implementation is roughly comparable. If you
>>>> ever get any comparison numbers, I'd love to see them.
>>>>
>>>> -- Ken
>>>>
>>> I have made a number of tests comparing HttpCore blocking vs HttpCore
>>> NIO vs Jetty blocking vs Jetty NIO. The results and the link to the
>>> source code can be found here:
>>>
>>> http://wiki.apache.org/HttpComponents/HttpCoreBenchmark
>>
>> So NIO seems to be about 2 times slower than blocking I/O. What was
>> the number
>> of concurrent connections used? Seems the benefit of NIO is not it's
>> speed but
>> simply the ability to maintain 10,000 concurrent connections at a time.
>>
> 
> The question is what is a legitimate use case for having to maintain so
> many concurrent connections? The only one I personally can think of is a
> proxy / gateway of some sort. I can cannot think of a single legitimate
> scenario where an HTTP agent would need to maintain more than a 100
> concurrent connections at most.

This same question has bothered me for the past few weeks. Given HTTP 1.1 allows
us to maintain only a few connections per remote host I can't think of a
scenario where we would not use connection pooling and blocking I/O.

> 
> Besides, modern operating systems and JVMs got pretty efficient at
> context switching. I would not be very surprised if blocking I/O
> outperformed NIO even with several thousand of concurrent connections.
> 
> NIO makes sense only when dealing with a _great_ number of _high
> latency_ connections, which most of the time stay idle waiting for a
> message to arrive.

Yup. I have used NIO in exactly this setting with a monitoring protocol that has
nothing to do with HTTP. I am starting to think the nature of HTTP makes NIO
useless for the client side. It is useful for the server side only because a
server must deal with unpredictable loads.

-- Todor

> 
> Cheers
> 
> Oleg
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> For additional commands, e-mail: httpclient-users-help@hc.apache.org
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org


Re: Classic I/O vs NIO comparison; was Re: How to do cookies with NHttp*?

Posted by Oleg Kalnichevski <ol...@apache.org>.
Todor Boev wrote:
> On 13.03.2010 18:59, Oleg Kalnichevski wrote:
>> Ken Krugler wrote:
>>> Hi Todor,
>>>
>> ...
>>
>>> I was hoping it might be related to nio vs. threaded approaches to
>>> HTTP handling.
>>>
>>> There's been a lot of debate about the value (performance, simplicity,
>>> resource consumption) but I haven't seen much head-to-head comparison
>>> where the rest of the implementation is roughly comparable. If you
>>> ever get any comparison numbers, I'd love to see them.
>>>
>>> -- Ken
>>>
>> I have made a number of tests comparing HttpCore blocking vs HttpCore
>> NIO vs Jetty blocking vs Jetty NIO. The results and the link to the
>> source code can be found here:
>>
>> http://wiki.apache.org/HttpComponents/HttpCoreBenchmark
> 
> So NIO seems to be about 2 times slower than blocking I/O. What was the number
> of concurrent connections used? Seems the benefit of NIO is not it's speed but
> simply the ability to maintain 10,000 concurrent connections at a time.
> 

The question is what is a legitimate use case for having to maintain so 
many concurrent connections? The only one I personally can think of is a 
proxy / gateway of some sort. I can cannot think of a single legitimate 
scenario where an HTTP agent would need to maintain more than a 100 
concurrent connections at most.

Besides, modern operating systems and JVMs got pretty efficient at 
context switching. I would not be very surprised if blocking I/O 
outperformed NIO even with several thousand of concurrent connections.

NIO makes sense only when dealing with a _great_ number of _high 
latency_ connections, which most of the time stay idle waiting for a 
message to arrive.

Cheers

Oleg

---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org


Re: Classic I/O vs NIO comparison; was Re: How to do cookies with NHttp*?

Posted by Chris Lowe <ch...@gmail.com>.
The benchmark results report a "Concurrency Level" of 25.

On 14 March 2010 13:29, Todor Boev <ri...@gmail.com> wrote:
> On 13.03.2010 18:59, Oleg Kalnichevski wrote:
>> Ken Krugler wrote:
>>> Hi Todor,
>>>
>>
>> ...
>>
>>>
>>> I was hoping it might be related to nio vs. threaded approaches to
>>> HTTP handling.
>>>
>>> There's been a lot of debate about the value (performance, simplicity,
>>> resource consumption) but I haven't seen much head-to-head comparison
>>> where the rest of the implementation is roughly comparable. If you
>>> ever get any comparison numbers, I'd love to see them.
>>>
>>> -- Ken
>>>
>>
>> I have made a number of tests comparing HttpCore blocking vs HttpCore
>> NIO vs Jetty blocking vs Jetty NIO. The results and the link to the
>> source code can be found here:
>>
>> http://wiki.apache.org/HttpComponents/HttpCoreBenchmark
>
> So NIO seems to be about 2 times slower than blocking I/O. What was the number
> of concurrent connections used? Seems the benefit of NIO is not it's speed but
> simply the ability to maintain 10,000 concurrent connections at a time.
>
> -- Todor
>
>>
>> Oleg
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
>> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org


Re: Classic I/O vs NIO comparison; was Re: How to do cookies with NHttp*?

Posted by Todor Boev <ri...@gmail.com>.
On 13.03.2010 18:59, Oleg Kalnichevski wrote:
> Ken Krugler wrote:
>> Hi Todor,
>>
> 
> ...
> 
>>
>> I was hoping it might be related to nio vs. threaded approaches to
>> HTTP handling.
>>
>> There's been a lot of debate about the value (performance, simplicity,
>> resource consumption) but I haven't seen much head-to-head comparison
>> where the rest of the implementation is roughly comparable. If you
>> ever get any comparison numbers, I'd love to see them.
>>
>> -- Ken
>>
> 
> I have made a number of tests comparing HttpCore blocking vs HttpCore
> NIO vs Jetty blocking vs Jetty NIO. The results and the link to the
> source code can be found here:
> 
> http://wiki.apache.org/HttpComponents/HttpCoreBenchmark

So NIO seems to be about 2 times slower than blocking I/O. What was the number
of concurrent connections used? Seems the benefit of NIO is not it's speed but
simply the ability to maintain 10,000 concurrent connections at a time.

-- Todor

> 
> Oleg
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> For additional commands, e-mail: httpclient-users-help@hc.apache.org
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org


Re: Classic I/O vs NIO comparison; was Re: How to do cookies with NHttp*?

Posted by Chris Lowe <ch...@gmail.com>.
Fair enough.  I was actually thinking about the request connection
overhead - I used to run Kaspersky as my AV (not recommended for
developers!) and it would additionally vet all connections.

Cheers for the info,

Chris.

On 13 March 2010 17:15, Oleg Kalnichevski <ol...@apache.org> wrote:
> Chris Lowe wrote:
>>
>> Nice work - I wonder what's going on with the Jetty NIO on Linux.
>>
>
> I know little about Jetty so it can well be it has not been configured in
> the best possible way. Optimizations are very welcome.
>
>
>> Out of curiosity - was there an AV product running at the time of the
>> Windows test?
>>
>
> I had Windows Defender set to off and no other AV running. It should not
> matter that much as the test case should perform no file system bound I/O
> (beyond normal class loading)
>
> Oleg
>
>> On 13 March 2010 16:59, Oleg Kalnichevski <ol...@apache.org> wrote:
>>>
>>> Ken Krugler wrote:
>>>>
>>>> Hi Todor,
>>>>
>>> ...
>>>
>>>> I was hoping it might be related to nio vs. threaded approaches to HTTP
>>>> handling.
>>>>
>>>> There's been a lot of debate about the value (performance, simplicity,
>>>> resource consumption) but I haven't seen much head-to-head comparison
>>>> where
>>>> the rest of the implementation is roughly comparable. If you ever get
>>>> any
>>>> comparison numbers, I'd love to see them.
>>>>
>>>> -- Ken
>>>>
>>> I have made a number of tests comparing HttpCore blocking vs HttpCore NIO
>>> vs
>>> Jetty blocking vs Jetty NIO. The results and the link to the source code
>>> can
>>> be found here:
>>>
>>> http://wiki.apache.org/HttpComponents/HttpCoreBenchmark
>>>
>>> Oleg
>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
>>> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
>> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org


Re: Classic I/O vs NIO comparison; was Re: How to do cookies with NHttp*?

Posted by Oleg Kalnichevski <ol...@apache.org>.
Chris Lowe wrote:
> Nice work - I wonder what's going on with the Jetty NIO on Linux.
> 

I know little about Jetty so it can well be it has not been configured 
in the best possible way. Optimizations are very welcome.


> Out of curiosity - was there an AV product running at the time of the
> Windows test?
> 

I had Windows Defender set to off and no other AV running. It should not 
matter that much as the test case should perform no file system bound 
I/O (beyond normal class loading)

Oleg

> On 13 March 2010 16:59, Oleg Kalnichevski <ol...@apache.org> wrote:
>> Ken Krugler wrote:
>>> Hi Todor,
>>>
>> ...
>>
>>> I was hoping it might be related to nio vs. threaded approaches to HTTP
>>> handling.
>>>
>>> There's been a lot of debate about the value (performance, simplicity,
>>> resource consumption) but I haven't seen much head-to-head comparison where
>>> the rest of the implementation is roughly comparable. If you ever get any
>>> comparison numbers, I'd love to see them.
>>>
>>> -- Ken
>>>
>> I have made a number of tests comparing HttpCore blocking vs HttpCore NIO vs
>> Jetty blocking vs Jetty NIO. The results and the link to the source code can
>> be found here:
>>
>> http://wiki.apache.org/HttpComponents/HttpCoreBenchmark
>>
>> Oleg
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
>> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>>
>>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> For additional commands, e-mail: httpclient-users-help@hc.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org


Re: Classic I/O vs NIO comparison; was Re: How to do cookies with NHttp*?

Posted by Chris Lowe <ch...@gmail.com>.
Nice work - I wonder what's going on with the Jetty NIO on Linux.

Out of curiosity - was there an AV product running at the time of the
Windows test?

On 13 March 2010 16:59, Oleg Kalnichevski <ol...@apache.org> wrote:
> Ken Krugler wrote:
>>
>> Hi Todor,
>>
>
> ...
>
>>
>> I was hoping it might be related to nio vs. threaded approaches to HTTP
>> handling.
>>
>> There's been a lot of debate about the value (performance, simplicity,
>> resource consumption) but I haven't seen much head-to-head comparison where
>> the rest of the implementation is roughly comparable. If you ever get any
>> comparison numbers, I'd love to see them.
>>
>> -- Ken
>>
>
> I have made a number of tests comparing HttpCore blocking vs HttpCore NIO vs
> Jetty blocking vs Jetty NIO. The results and the link to the source code can
> be found here:
>
> http://wiki.apache.org/HttpComponents/HttpCoreBenchmark
>
> Oleg
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org