RE: [Haskell-cafe]Re: Hugsvs GHC (again)was: Re: Somerandomnewbiequestions

On 20 January 2005 10:01, Keean Schupke wrote:
Simon Marlow wrote:
We're getting a bit confused here. Keean: the original question was about whether a disk read will stop all other *Haskell* threads. Not OS threads. The two are quite different beasts in GHC.
Cheers, Simon
But if GHC is running with the -threaded flag, then other Haskell-threads can keep running using the second OS-thread, even though one Haskell-thread (and its associated OS thread) is blocking - right?
If the call to read() was "safe" (i.e. the FFI "safe" attribute), then yes. But GHC currently does and "unsafe" call to read(), even with -threaded, which doesn't give other threads a chance to run. Perhaps it should be a safe call. That's going to hurt performance unless you really need to parallelise disk I/O, though. Maybe it wouldn't hurt too much, someone should measure it.
In other words even with disk IO (as I said the kernel would not busy-wait - so there are only two options, this OS-thread is put to sleep, or the data is already in a buffer and is returned immediately), all the other Haskell-threads should not block (provided it is running with -threaded)
Have I got that right?
Yes, except that you forgot that not all foreign calls can run concurrently with Haskell code. Only the "safe" ones can. Cheers, Simon

Simon Marlow wrote:
Yes, except that you forgot that not all foreign calls can run
concurrently with Haskell code. Only the "safe" ones can.
Okay, now I understand what is going on. Why is there extra overhead for a 'safe' call? Keean. //
participants (2)
-
Keean Schupke
-
Simon Marlow