On Oct 19, 2006, at 1:00 PM, Topher Fischer wrote:

Dr. Mercer's Computer Architecture (CS345) class gave me my only
experience with a practical use of forking.  We wrote a small UNIX
shell, and when the user typed in a command, the program would fork.
This creates a new process with its own memory space, file descriptor
table, signal handlers, etc.  The child process would then exec (man 3
exec) the user's command, which takes over the process that was created by the fork command. If concurrency is the only goal, then threads will usually take care of the problem. However, if you need a completely new
process with its own resources, then fork you.  I mean, then you fork.


If concurrency is the only goal, then it would be best to analyze your needs before choosing threads over processes. In Linux, at least, both have similar overhead. Processes simply have a flag that says that the heap should be copy-on-write instead of shared, IIRC. The big advantage of a process over a thread is that you get to take advantage of the built-in memory protection that Linux gives you. By /not/ sharing memory by default, you knock out the nondeterministic interleaving of execution threads that you get with shared memory, which makes understanding your program's behavior much simpler.

If passing messages or setting up explicit shared memory turns out to be far more awkward, and your problem doesn't involve too many hairy locks and such, threads might be a good solution. But in Linux, you shouldn't reach for them unless you've clearly demonstrated to yourself that the benefits outweigh the costs.

                --Levi

/*
PLUG: http://plug.org, #utah on irc.freenode.net
Unsubscribe: http://plug.org/mailman/options/plug
Don't fear the penguin.
*/

Reply via email to