Re: how pipeline works

On Mon, Sep 08, 2003 at 10:15:33AM -0700, Jerry G. Chiuan wrote:
> I might need to correct my guess in previous email here
> On client side, since the thread has to wait for the response after the
> request is sent out "correspondingly", it is impossible to have
> one dedicated thread taking care of sending requests and one for receiving
> responses ( but we can do it in Socket implementation )

I'd say it is possible to have one thread which sends requests and one
which receives the answers, if the socket that both threads access isn't
locked completely during the time any thread is blocked.

(This is a general remark; _libwww_ doesn't use threads, it avoids blocking
calls by using select().)

> I might need to implement a thread pool, to pull out one thread for one
> request....therefore there is a maximun number of requests which is
> possibly sent out without waiting for their responses.
> 
> Is it a correct thought?

It depends very much on how your whole application is organized.

My own libwww-using code is single-threaded. It starts new requests from
the "main event loop" which is called at regular intervals, so it can still
take full advantage of pipelining.

Since libwww is not thread safe, any solution of yours in which several 
threads access libwww would simply have one "libwww thread" which gets 
handed the requests from the other threads and passes them to libwww.

I must say I'm not really sure what you have in mind. :)

Maybe you're thinking in terms of the example libwww programs which all
have code which first sends the request, then calls some other libwww
functions and blocks until they return the data.

This is not how you should use libwww once your program has >1 concurrent 
requests running. You can't run in parallel several threads which do this 
- libwww will crash!

The docs in /Library/User/Architecture/Events.html explain the basic idea
of a central event loop. Unfortunately, this area of libwww is a rather
hard to understand, especially if the concept of an event loop is new to
you.

I develop a GTK+ app and was lucky enough to find the "glibwww" code which
plugs libwww into the GTK+ (more accurately glib) event loop. After a quick
look I think the eventloop.c example shows how to do >1 requests without
glib.

Cheers,

  Richard

-- 
  __   _
  |_) /|  Richard Atterer     |  GnuPG key:
  | \/¯|  http://atterer.net  |  0x888354F7
  ¯ '` ¯

Received on Monday, 8 September 2003 17:30:35 UTC