
Why is disk a special case? I have never heard that all processes under linux wait for a disk read... The kernel most certainly does not busy wait for disks to respond, so the only alternative is that the process that needs to wait (and only that process) is put to sleep. In which case a second thread would be unaffected. Linux does not busy wait in the Kernel! (don't forget the kernel does read-ahead, so it could be that read really does return 'immediately' and without any delay apart from at the end of file - In which case asynchronous IO just slows you down with extra context switches). Keean. Simon Marlow wrote:
On 19 January 2005 16:58, Keean Schupke wrote:
Simon Marlow wrote:
This is what GHC does, if I understand you correctly. The thread running select() does so in its own OS thread, while another OS thread runs the Haskell code. As long as you use -threaded, that is. Oh, and before GHC 6.4 it was done a different way - the scheduler used to do the select() between running Haskell threads.
Cheers, Simon
So this means even though the IO calls block, the other Haskell threads (when run with -threaded) keep running?
Yes, unless the IO is to/from disk on a Unix system.
Cheers, Simon