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.
