
I wrote a simple ECHO server like this: ---------------------------------------------------- import Network import System.IO import Control.Concurrent service cs = do ln <- hGetContents cs hPutStr cs ln service cs acceptloop ls = do (cs, host, port) <- accept ls hSetBuffering cs LineBuffering forkIO (service cs) acceptloop ls main = do ls <- listenOn (PortNumber 10061) acceptloop ls ---------------------------------------------------- And tested it with a client that initiates as many parallel connections as possible. The number of connections can just reach to 1000+ on my machine, but I thought it should be more, since forkIO generates lightweight threads. I also examined the number of threads in this process with some tool and it proved there was one native thread per connection. When I replaced the 'forkIO' in the program with 'forkOS', I got an exactly similar result. Have I thought something wrong about forkIO?