Advanced Unix programming, 2nd Edition is a fantastic resource for learning the details of programming Unix systems. This is extremely well written (one of my favorite books in English), the depth is excellent, and attention to the four common environments (at the time of publication) helps to ensure good rounding. This is not so badly outdated - new features in new operating systems can be fantastic for specific problems, but this book describes the basics very well.
The disadvantage, of course, is that APUE2nd skips some fantastic third-party tools, such as libevent , which can program socket-based servers much easier. (And it automatically selects the "best" select(2) , poll(2) , epoll(4) , kpoll and Windows event processing for the platform.)
As for the choice between threads and processes, it boils down to: how much memory exchange do you want / need between tasks? If each process can work in relatively isolation, the processes provide better memory protection and no speed limits. If processes need to interact with each other with objects or objects that belong to the same thread, then threads provide the best primitives for sharing data. (But many argue that shared thread memory is an invitation to interesting and exciting errors. Depends.)
source share