In Appendix A , File I/O Essentials, we covered how an application developer can exploit the available glibc library APIs as well as the typical system calls for performing file I/O (open, read, write, and close). While they work, of course, the reality is that performance is not really optimized. In this chapter, we focus on more advanced file I/O techniques, and how the developer can exploit newer and better APIs, for gaining performance.
Often, one gets stressed about the CPU(s) and its/their performance. While important, in many (if not most) real-world application workloads, it's really not the CPU(s) that drag down performance but the I/O code paths that are the real culprit. This is quite understandable; recall, from Chapter 2, Virtual Memory, we showed that disk speed, in contrast with RAM, is orders of magnitude slower. The case is similar with...