[zeromq-dev] patch: handle idle connections
Martin Sustrik
sustrik at fastmq.com
Sun Apr 12 09:13:33 CEST 2009
Dhammika Pathirana wrote:
> Hi Martin,
>
> On Sat, Apr 11, 2009 at 11:48 AM, Martin Sustrik <sustrik at fastmq.com> wrote:
>> Hi Dhammika,
>>
>> I was trying to merge in your O(1) scheduler and in the process of doing so
>> I've found one more place where the complexity is still O(n):
>>
>> +void zmq::mux_t::revive (pipe_t *pipe_)
>> +{
>> + // Revive an idle pipe.
>> + for (pipes_t::size_type i = pipes.size (); i-- > active; ) {
>> + if (pipes [i] == pipe_) {
>> + std::swap(pipes [i], pipes [active]);
>> + ++active;
>> + return;
>> + }
>> + }
>>
>> We should convert the pointer into array index in constant time somehow.
>>
>> Any ideas?
>
>
> I see, if we have only few idle pipes then it wouldn't be bad.
> We could traverse from the beginning though. This will probably
> improve it for pipes which go idle for a fraction.
> But still worst case is O(n).
>
> + // Revive an idle pipe.
> + pipes_t::size_type j = active;
> + pipes_t::size_type i = pipes.size ();
> +
> + for ( ; i > j; j++) {
> + if (pipes [j] == pipe_) {
> + std::swap(pipes [j], pipes [active]);
> + ++active;
> + return;
> + }
> + }
>
> What do you think?
What about doing something like database denormalisation i.e. adding
redundant data to improve performance?
Say the pipe remembers the index it occupies in the array:
// Revive an idle pipe.
pipes_t::size_type i = pipe_->index ();
...
Martin
>
>
> Dhammika
>
>
>
>> Martin
>>
>> Dhammika Pathirana wrote:
>>> On Mon, Mar 30, 2009 at 12:45 AM, Martin Sustrik <sustrik at fastmq.com>
>>> wrote:
>>>> Dhammika,
>>>>
>>>> Great! We'll give it a try on all the different platforms. We'll do some
>>>> performance tests as well (1,10,100,1000,10000 idle connections +
>>>> ping-pong
>>>> latency test). However, it won't get into version 0.6 as that one is
>>>> already
>>>> closed for new functionality.
>>>>
>>>> Also, we need you to state that the patch is submitted under MIT license
>>>> to
>>>> be able to merge it into the trunk.
>>>>
>>>
>>> Sure, patch is submitted under MIT license.
>>>
>>> Dhammika
>>
More information about the zeromq-dev
mailing list