Noel Chiappa <jnc(a)mercury.lcs.mit.edu> wrote:
I'm
curious as to what the rationale was for Unix to have been designed
with basic I/O being blocking rather than asynchronous.
It's a combination of two factors, I reckon. One, which is better depends a
lot on the type of thing you're trying to do. For many typical thing (e.g.
'ls'), blocking is a good fit. And, as As Arnold says, asyhchronous I/O is
more complicated, and Unix was (well, back then at least) all about getting
the most bang for the least bucks.
I just happened to open a binder today of old papers about UNIX(tm),
including Ken Thompson's "Unix Implementation" paper, which says at the
bottom of the introduction:
"What is or is not implemented in the kernel represents both a great
responsibiity and a great power. It is a soap-box platform on "the
way things should be done." Even so, if "the way" is too radical, no
one will follow it. Every important decision was weighted carefully.
Throughout, simplicity has been substituted for efficiency. Complex
algorithms are used only if their complexity can be localized."
John