How to stop the thread from yielding per 20ms?

Zhen Zhang izgzhen at
Sun Jul 5 05:10:26 UTC 2015

Hi Ryan,

Thank for your help. But it turned out to be not working for me. I even commented out the `startTimer` and `stopTimer` in `rts/Timer.c`, but it seems not working as well.

For example. this program:

main = do
	forkIO $ forever $ print “a”
	forkIO $ forever $ print “b”
	threadDelay 100000

When I added the `-threaded`, it will schedule normally, despite whether I commented out some code or add `-V0`. When I dropped  `-threaded`, the `timerManager` stopped working as well, so it doesn’t make sense to me. Bad luck, but thank you all the way.


Zhen Zhang
USTC, China

On July 4, 2015 at 10:08:44 PM, Ryan Yates (fryguybob at wrote:

Hi Zhen,

The RTS flag -V sets the tick interval (setting to 0 disables).  If you grep for `RtsFlags.MiscFlags.tickInterval` you can find where it gets used.  Hope this helps.


On Sat, Jul 4, 2015 at 6:25 AM, Zhen Zhang <izgzhen at> wrote:

I am trying to stop the GHC thread scheduler from atomically do round-robin scheduling. It might be strange that I am asking for that, in fact, my intention is to implement the “Lightweight Concurrency” on top of current RTS system. I am trying to use `GHC.Event`’s timeout mechanism to interfere with the scheduling behavior and it seems working a bit. But the automatic scheduling at the same time by RTS renders this effort invalid.

For this part, I have tried to modify `rts/Scheduler.c`, masked some `startTimer` in `schedule()`, change the `appendToQueue` to `pushOnQueue` in `scheduleHandleYield` but nothing really works. (The GHC is still doing RR scheduling, even I changed some key code I thought)

So I am curious if anyone familiar with the RTS could give me some suggestions on this problem.

Thanks a lot!


ghc-devs mailing list
ghc-devs at

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the ghc-devs mailing list