June 19th, 2008


What does being I/O bound really mean?

For a long time “I/O bound” primarily referred to hardware or possibly operating system limitations. That was a useful definition, but it is time for it to change. Most software being developed today has a very tall stack of abstractions sitting between it and the hardware. Operating systems schedule I/O and have to split limited resources among many competing processes. Virtual machines sit on top of operating systems, isolating the programmer from the underlying OS and hardware. Libraries and frameworks isolate the programmer from the virtual machine and even other libraries and frameworks. I/O from the programmer's perspective is, or at least should be if he is working on top of good abstractions, that I/O is “everything that happens between when my program requests some data and when it receives it.” Consequently, libraries and runtimes should go to great lengths to ensure that being I/O bound is as close to its original meaning as possible. Prior to multicore systems becoming pervasive that was largely true, but today's I/O libraries fail to take advantage of them, and consequently force I/O into being a bottleneck when it should not be.

Captain Obvious

Polite social fictions: East vs. West

You and I are very busy people.

* Your time is valuable; I will take care not to waste it.
* People display their importance by appearing busier than others. Many people are overworked and overscheduled.
* To help them uphold their sense of importance, and not to stress someone who is already overloaded, it is polite to be careful of "taking" another person's time. Most polite interactions make some reference to time ("I'll just be a moment." "I know you're busy, but..." "Thank you for your time.")