[Haskell-cafe] Concurrency questions
Don Stewart
dons at galois.com
Mon Jan 7 16:43:26 EST 2008
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
More information about the Haskell-Cafe
mailing list