A while ago I wrote up a post on Asynchronous Sockets. Ian was kind enough to send me an email correcting a few niggles with it and in an email exchange, cleared up a few other misconceptions about how sockets (and other IO operations for that matter) really work.
Well now he posts a great article that points out that a program doesn't always use a thread to perform some work.
There seems to be a popular notion that in order for a program to perform an operation, it must have a thread with which to do it. This is not always the case. Often, the only points at which you need a thread are at the start and end of the operation....
This is recommended reading.
Read the rest here