[Haskell-cafe] Re: Is my code too complicated?
Felipe Lessa
felipe.lessa at gmail.com
Mon Jul 5 14:35:38 EDT 2010
On Mon, Jul 5, 2010 at 10:29 AM, Ertugrul Soeylemez <es at ertes.de> wrote:
> It happened once to me that I forgot that MVars don't have a queue. A
> database thread would take values out of the MVar as commands and
> execute them, but I used the same thread to put a command into the MVar
> (for later execution). It worked most of the time, unless another
> thread put a command concurrently, right after the last command was
> executed and before the database thread put another command ⇒ deadlock.
>
> I fixed this by replacing the MVar by a Chan. Could STM have helped
> here?
Probably only if both "puts" were in the same transaction, I guess.
Even with STM the solution is a channel, i.e. TChan.
> And as a related question, how fast does STM perform in average?
> Is it suitable for high traffic applications (not network/file traffic,
> but MVar/Chan traffic)? Usually in a non-SMP setting I can easily pass
> hundreds of thousands of values per second through MVars between tens of
> thousands of threads.
As always, I guess you should benchmark :). There is some overhead,
indeed, however for most applications I guess it should be fine.
Specially because that overhead comes to save you from a lot of
headaches.
Cheers,
--
Felipe.
More information about the Haskell-Cafe
mailing list