Я считаю, что TVar довольно прост в работе, хотя MVar выглядит немного проще, в то время как TVar немного более функциональен.Когда/зачем использовать MVar над TVar
Так что мой вопрос довольно прост, в каком состоянии я хочу пойти в MVar, а не в TVar? Я полагаю, что в любое время я не нуждаюсь в транзакционном обновлении I может использовать MVar, но каким образом это мне помогает?
Эффективность, хороший 'нах.Я полагал, что они были так же хороши, так морали истории: используйте TVar, если вам требуется транзакционное обновление, иначе используйте MVar **, потому что это замедлит ваше многопоточное приложение значительно меньше ** –
Может кто-нибудь определить фактическую разницу в скорости ? (Предположительно, это сложно измерить, так как оно зависит от фактических взаимодействий потоков ...) – MathematicalOrchid
@MathematicsOrchid игнорирует проблемы параллелизма: чтение и запись 'IORef' будут вашими самыми быстрыми операциями, но GHC 7.8 поставляется с некоторыми улучшениями в« MVar », что принесите 'takeMVar/putMVar' за несколько нс' read/writeIORef' (скажем, 9.7/4.6 против 3.7/7/3 на моей машине (<обычный отказ от лжи и контрольных показателей здесь)), и у нас также есть новый очень быстрый 'readMVar' (когда MVar полон конечно). – jberryman