Thanks for the explanation, Sergey, that certainly helps clear things up a
lot. I will see what I can do now that I understand it better.
Best,
Scott


On Thu, Aug 7, 2014 at 11:41 AM, Sergey Lyubka <[email protected]> wrote:

> Mongoose is single-threaded, non-blocking, async.
> There are many products that use the same model.
> For example, redis <http://redis.io/>, or node.js <http://nodejs.org/>.
> If you tell their developers their software is not able to handle
> concurrent requests, they could be surprised.
>
> I believe you have a wrong idea about how mongoose works. If you think
> that mongoose accepts the connection, then reads the request, then calls
> the callback to send the reply and could not process other requests during
> that --- that's wrong understanding.
>
> Mongoose can accept multiple connections, and read request from many of
> them simultaneously. When the request is fully buffered, callback is
> called. Callback must not block, otherwise it can stall the serving.
>
> Blocking or otherwise long-running operations must be moved to dedicated
> threads. A callback that needs to get a result of long-running operation
> should schedule it, return MG_MORE -- and not block mongoose. Mongoose will
> send MG_POLLs to that connection, where callback may decide to complete the
> reply, or, alternatively, other thread could mg_wakeup_server_ex() to
> push the result of the long-running operation to the respective connection.
>
> If there are many cores, mongoose instances could be created per core,
> sharing the same listening socket -- that would do load balancing.
>
> My benchmarks shows that old, multithreaded mongoose is noticeably slower
> then singly-threaded mongoose, running on my 8-core development box running
> simple "hello world" example. Benchmarks were done using well known
> benchmarking tools like ab, wrk, siege - with different concurrency levels,
> from 1 to hundreds.
>
> I hope that clears up the architecture and how concurrent requests are
> processed.
>
>
>
> On Thu, Aug 7, 2014 at 5:33 PM, Scott Ellis <[email protected]>
> wrote:
>
>> OK thanks. To be clear then, with the previous multi-threaded version,
>> mongoose itself handled multiple concurrent requests by starting new
>> threads internally, but now with the single threaded mongoose, it only
>> handles one request at  time in serial, so it is up to the user callback
>> functions to start new threads to support multiple concurrent requests?
>>
>>
>> On Thursday, August 7, 2014 9:52:25 AM UTC-6, Sergey Lyubka wrote:
>>
>>> On Thu, Aug 7, 2014 at 4:51 PM, Scott Ellis <[email protected]> wrote:
>>>
>>>> Ok but if a user callback takes a while to complete, it appears that
>>>> mongoose will not serve the next request until the previous user callback
>>>> completes. Is that correct?
>>>
>>>
>>> That is correct.
>>>
>>  --
>> You received this message because you are subscribed to the Google Groups
>> "mongoose-users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>>
>> To post to this group, send email to [email protected].
>> Visit this group at http://groups.google.com/group/mongoose-users.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>  --
> You received this message because you are subscribed to a topic in the
> Google Groups "mongoose-users" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/mongoose-users/JCvEu17YeYk/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/mongoose-users.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"mongoose-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/mongoose-users.
For more options, visit https://groups.google.com/d/optout.

Reply via email to