
andrewcoppin:
Spencer Janssen wrote:
On Sun, Jan 06, 2008 at 11:30:53AM +0000, Andrew Coppin wrote:
Just a couple of things I was wondering about...
1. Is there some way to assign a "priority" to Haskell threads? (The behaviour I'd like is that high priority threads always run first, and low priority threads potentially never run at all unless there's an available processor which is completely idle.)
Not in the current system. It is not clear that thread priorities are so nice anyway (see 'priority inversion' on Wikipedia, for example).
Well, I was thinking more of using them for two things. One is for speculative work (i.e., doing work which we might need later - but don't bother unless there's cores going spare). The other is for working on entirely independent tasks - I don't see how inversion can happen when one thread is solving problem X and another is solving problem Y. But sure, it certainly adds more complexity to have priority levels.
[I can also imagine situations where you might want to assign 80% CPU to one thing, and 20% CPU to the other - but that really does sound hard to implement...]
2. I have a situation where I have a thread generating some data and putting it into a mutable array, and another thread trying to read that data. Is there a way I can make the reader thread block if it tries to read a cell that hasn't been computed yet, but not introduce too much overhead for cells that have been filled in?
I'd probably use an Array of TMVars, they should be faster than MVars when multiple threads are reading simultaneously.
Mmm, OK. I'll try that. (I wasn't actually aware that STM is working yet...)
It works, and has done so for a couple of years now. It's used in production systems. Where'd you hear otherwise? -- Don