I remember working on getting Arpanet access on an 11/34 running V7 around 1978 or 1979.
(SU-ISL). We used an 11/23 as a front end to run NCP, using a variation of Rand’s code. I
wrote some sort of bisync driver for packet communications between the /23 and the /34,
and I think added an IOCTL or some hack to ask if there was a message ready. So a polling
variety of non-blocking I/O :)
Meanwhile, on the Alto, surely an underpowered machine, the style for UI programming and
asynch I/O was mostly event driven, much like libevent in more recent years. I found that
very easy to understand.
The main trajectory of PARC was lightweight threads calling synchronous I/O which really
has to be counted as a Bad Idea not yet fully stamped out.
I’ve always thought select(2) was a pretty good thing. In 1995 at Open Market we had a
single-process web server that had no difficulties running 1000 to 1200 connections. I
think that was BSD, and later OSF-1.
-L