
Thanks for the suggestion, which Arjen made also. Unfortunately, it does
not appear to help. See this simple program:
-- Loop.hs
import Control.Exception
import System.Timeout
main :: IO (Maybe Integer)
main = timeout 100000 $ evaluate $ last $ repeat 0
-- end
With either GHC invocation "stack exec ghc Loop[ -- -fno-omit-yields]",
running ./Loop fails to terminate (it should do so in 0.1s).
Based only on the very terse description of that flag in the User's Guide,
and its name, I think the problem is simply that GHC doesn't normally
*generate* yields in that loop, so there's nothing not to omit.
On Mon, Nov 26, 2018 at 4:14 PM Carter Schonwald
so one way to handle no allocation things playing nicely with the scheduler is to compile haskell code with -fno-omit-yields
this will generate code which has scheduler yields even in loops which dont allocate
cheers! -Carter
On Mon, Nov 19, 2018 at 3:27 PM Viktor Dukhovni
wrote: On Mon, Nov 19, 2018 at 11:26:17AM -0800, Ryan Reich wrote:
I suppose my question concerns the more general question of how to create OS-managed threads in GHC. [...] I would have expected there to be a corresponding operation in GHC Haskell ("bound threads" seem not to be it, as they are still scheduled by the RTS) but it does not appear that there is. Is this because of the need to keep the runtime unified? Because it seems strange that we are prevented from operating truly independent threads.
I was just reading:
https://cs.nyu.edu/~mwalfish/classes/14fa/ref/boehm05threads.pdf
which may offer some insight. The runtime needs to be able to provide a consistent memory model to threads. Just running something in an OS thread that's managed by the RTS could make that difficult, and it is not clear how that cooperates with garbage collection.
But to your point, when adding threads to your example, I find that the infinite loop then runs concurrently in all the threads, and the timeout never happens. While:
Replacing: let x = 0:x in last x with: let ! x = 0 + x in x
does make timeout work, so it is not entirely obvious which pure computations can be timed out.
-- Viktor. _______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.
_______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.