What's wrong with 2006 programming?
Just to amplify his point, if you want your program to take page faults as PHK suggests, it <i>has</i> to be multithreaded. If you choose event-driven concurrency you can't afford to take page faults in mmap() or read(). When you make the threads vs. events decision you're implicitly making a bunch of related decisions about I/O and scheduling as well; a hybrid approach (like using events and mmap) won't work well.