[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [LCP]design issues



Kurt Mueller wrote:
On Wednesday, August 27, 2003, at 11:46 AM, mehul radheshyam choube wrote:

    i am going to develop a server program for linux platform. the
scenario is of One Server - Multiple Clients. which of the following
technology be used - pipes, FIFO, Message Queues or threads? which one is
the best/widely used?


I suppose you will run this on a UNIX/UNIX-like system.
<description removed>
We have no experience in threads.

Just to add a note about threads... unless you have a very good reason for doing so, I'd steer clear of them for several reasons.


1. Synchronization is not as simple between threads as it is with the various forms of IPC. IPC has well defined events which occur (eg. data available on a pipe) and which don't necessarily have to be actively listened for when they go off (eg. read() can happen any time after the data is available).

2. Since all memory is shared between threads it is possible to have interactions betweens the clients and the server that you weren't expecting. You basically need to lock ALL memory accesses which are not on the stack.

3. Launching a new client requires a special interface into the application... possibly with IPC which you were trying to avoid in the first place.

4. There is also a lack of robustness for when things go wrong in a single thread. A segfault can bring the entire app down.

5. The most compelling reason is that you reduce the modularity of your system. The above points are all a part of this problem, but there are other hassles as well, such as increased complexity, and a greater likelihood of bugs.

Threads are very useful and certainly have their place, but if IPC is an option for you then it's highly unlikely that threads will be useful to you.

--
Regards,
Paul Gearon

Software Engineer                Telephone:   +61 7 3876 2188
Plugged In Software              Fax:         +61 7 3876 4899
http://www.PIsoftware.com        PGP Key available via finger

Catapultam habeo. Nisi pecuniam omnem mihi dabis, ad caput tuum saxum
immane mittam.
(Translation from latin: "I have a catapult. Give me all the money,
or I will fling an enormous rock at your head.")