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.

Reply via email to