Hi Sergey,
Thanks a lot for your responses. I have a follow up question. You said
"long-running
operations must be moved to dedicated threads." Does mongoose do this
internally? I.e. if a client requests a large file that takes a few seconds
to serve up, are new requests blocked until the time consuming request is
complete?


On Thu, Aug 7, 2014 at 2:10 PM, Scott Ellis <[email protected]> wrote:

> 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