| ... | ... | @@ -89,12 +89,7 @@ to avoid using the term. |
|
|
|
- No runnable process will be indefinitely delayed.
|
|
|
|
- No thread can be blocked indefinitely on an MVar unless another thread holds the MVar indefinitely.
|
|
|
|
|
|
|
|
**Non-blocking foreign call** as commonly used, actually means a foreign call that \*can\* block. As a
|
|
|
|
consequence of the fairness policy, one wishes to place the requirement on
|
|
|
|
implementations that such a blocking foreign call _should_not_
|
|
|
|
block progress of other Haskell threads. The thread-nature of the
|
|
|
|
foreign call is "blocking". The Haskell-API nature is desired to be
|
|
|
|
"non-blocking".
|
|
|
|
**Concurrent foreign call** means a foreign call that should run concurrently with other Haskell threads. It is a requirement of "fairness" (above) that a foreign call should not prevent other threads from making progress indefinitely. Note that we used to use the term **non-blocking foreign call** here, but that lead to confusion with "foreign calls that block", which are foreign calls that may wait indefinitely for some resource, such as reading data from a socket. "foreign calls that block" are the main reason for wanting support for concurrent foreign calls.
|
|
|
|
|
|
|
|
**Scheduling.**
|
|
|
|
All current (and likely future) implementations of
|
| ... | ... | |