Haskell:TVar:Предотвращение голодания

Я рассматриваю возможность использования TVar для хранения некоторого состояния в веб-приложении (, которое можно воссоздать при перезапуске). Однако меня беспокоят спорные аспекты TVar. Кажется, что частая короткая транзакция может привести к истощению более длинных транзакций, постоянно прерывая их. Кроме того, поскольку более длительные транзакции продолжают перезапускаться, это увеличивает нагрузку на ЦП, что приводит к дальнейшему увеличению продолжительности этих транзакций. В конце концов я чувствую, что это может привести к тому, что сервер полностью перестанет отвечать на запросы.

Учитывая это, у меня есть вопросы:

(1)Может ли TVar (или другой тип данных)использовать блокировки, а не одновременные попытки/повторные попытки.

(2)Может ли TVar (или другой тип данных)иметь какой-то другой механизм состязания, то есть «разрешить транзакциям выполняться в течение секунды, прежде чем запускать другую транзакцию», или, по крайней мере, некоторую гарантию того, что транзакции в конечном итоге завершатся (т.е. алгоритм конкуренции, который предотвращает голодание для более длительных транзакций).

7
задан Clinton 11 April 2012 в 05:38
поделиться