In the traditional Unix model, when a process needs something performed by another entity, it
forks a child process and lets the child perform the processing. Most network servers under Unix are written this way, as we have seen in our concurrent server examples: The parent
accepts the connection,
forks a child, and the child handles the client.
While this paradigm has served well for many years, there are problems with
fork is expensive. Memory is copied from the parent to the child, all descriptors are duplicated in the child, and so on. Current implementations use a technique called copy-on-write, which avoids a copy of the parent’s data space to the child until the child needs its own copy. But, regardless ...