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
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to