Nope, not me. Cheers, Gonzalo
On Wed, Jun 21, 2017 at 4:53 PM, romeo kalebic <[email protected]> wrote: > Dear Mr Gonzalo, > > I'm very sorry for indiscretion. > > Are You user eladn on GitHub, autor of libmysqlasync? > https://github.com/eladn/libmysqlasync > > Best Regards, Romeo > > On Monday, October 17, 2016 at 7:42:10 PM UTC+2, Gonzalo Diethelm wrote: >> >> First post, libuv newbie. >> >> I am trying to understand how a multi-threaded web server would fit in >> the libuv design. This is how I envision it, but I have some questions. >> >> The main thread would run the HTTP accept loop, and I would expect each >> connection request to be handled to a worker in the thread pool. Each >> thread in the worker pool will also be doing I/O (think running a query >> against MySQL), and will somehow pass the results back to the main thread. >> >> After reading a bit here and there, I would think this is one way to do >> this with libuv: >> >> 1. Main thread runs default loop and handles all the HTTP traffic. >> Whenever it gets an HTTP request, it puts it in a thread-safe queue and >> does a notify_all to awake one random thread in the pool; all of these >> threads would be waiting on the queue. >> >> 2. One worker thread awakes, dequeues pending work from the queue and >> runs it. I guess each thread has its own libuv loop, to handle the I/O >> needed to go to MySQL / read a file / etc. >> >> 3. Once the request has been processed, the worker thread notifies the >> main thread that the response is ready and tries to read the next pending >> request from the queue; iterate. >> >> 4. The main thread sends the response back to the HTTP client and closes >> that connection. >> >> Now, there's some hand waving here, and I am not sure if what I'm >> describing is the proper / correct / best / possible way to do this with >> libuv. Some specific questions: >> >> 1. Is using a thread-safe queue a good match for libuv? If libuv provides >> something like this, I have not been able to find it, and that makes me >> doubt this would be the libuv way. >> >> 2. Is it possible / advisable to have multiple threads in a process, each >> handling I/O with its own libuv loop? I guess yes. >> >> 3. How would the worker threads notify the main thread that a response is >> ready? Would they use an async handle for this? If yes, can they all use >> the same async handle, or would each worker require their own async handle >> plugged to the main thread loop? But if they all share the same async >> handle, how does the main thread know which connection this response should >> be sent to? >> >> Feel free to completely destroy this description and show me the right >> way to do this. Thanks for any hints and comments. Cheers! >> > -- > You received this message because you are subscribed to a topic in the > Google Groups "libuv" group. > To unsubscribe from this topic, visit https://groups.google.com/d/ > topic/libuv/85vggpS8NTg/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 https://groups.google.com/group/libuv. > For more options, visit https://groups.google.com/d/optout. > -- Gonzalo Diethelm [email protected] -- You received this message because you are subscribed to the Google Groups "libuv" 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 https://groups.google.com/group/libuv. For more options, visit https://groups.google.com/d/optout.
