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 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.

Reply via email to