--------------------------------------------
-- stm-chans 1.2.0
--------------------------------------------

The stm-chans package offers a collection of channel types, similar to Control.Concurrent.STM.TChan but with additional features.


--------------------------------------------
-- Changes (since 1.0.0)
--------------------------------------------

* (Version 1.1.0) Added tryWriteTBChan.

* (Version 1.1.0) Added tryWriteTBMChan.

* Some major performance improvements in TBChan and TBMChan, thanks to Thomas DuBuisson. In particular, these improvements reduce contention between readers and writers, improving throughput by up to 2--3 times when producers and consumers are running in separate OS threads. The cost for non-parallel programs is trivial (<1% worst-case running time, per Criterion).

* Added estimateFreeSlotsTBChan, freeSlotsTBChan, estimateFreeSlotsTBMChan, and freeSlotsTBMChan. These functions return either the exact number or a lower-bound on the number of free slots available before the channels will block/retry.

* Some other minor optimizations and code improvements.


--------------------------------------------
-- Long description
--------------------------------------------

In particular stm-chans offers these types:

* Control.Concurrent.STM.TBChan:  Bounded FIFO channels.

When the channel is full, writers will block/retry. This ensures that the writers do not get too far ahead of the readers, which helps to make sure that memory and cpu resources are used responsibly.

* Control.Concurrent.STM.TMChan:  Closeable FIFO channels.

This is like TChan (Maybe a) but with a monotonicity guarantee that once Nothing is returned all future reads will be Nothing as well.

* Control.Concurrent.STM.TBMChan: Bounded Closeable FIFO channels.

    This combines the capabilities of TBChan and TMChan.


In addition, the stm-chans package offers a (partial) compatibility layer for some recent API improvements to the stm package (see ticket #5104 [1]). These new functions include:

* tryReadTChan :: TChan a -> STM (Maybe a)

A version of readTChan which does not retry. Instead it returns Nothing if no value is available.

* peekTChan :: TChan a -> STM a

Get the next value from the TChan without removing it, retrying if the channel is empty.

* tryPeekTChan :: TChan a -> STM (Maybe a)

A version of peekTChan which does not retry. Instead it returns Nothing if no value is available.


[1] http://hackage.haskell.org/trac/ghc/ticket/5104


--------------------------------------------
-- Links
--------------------------------------------

Homepage:
    http://code.haskell.org/~wren/

Hackage:
    http://hackage.haskell.org/package/stm-chans

Darcs:
    http://community.haskell.org/~wren/stm-chans

Haddock (Darcs version):
    http://community.haskell.org/~wren/stm-chans/dist/doc/html/stm-chans

--
Live well,
~wren

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to