-- | Launch- and Dispatch messages to processes.
--
-- A pool has an 'Input' for 'Multiplexed' messages,
-- and dispatches incoming messges to concurrent
-- processes using user defined @'MessageBox'es@.
--
-- The pool starts and stops the processes and
-- creates the message boxes.
--
-- The user supplied 'PoolWorkerCallback'
-- usually runs a loop that @'receive's@ messages
-- from the 'MessageBox' created by the pool for that worker.
--
-- When a worker process dies, e.g. because the
-- 'PoolWorkerCallback' returns, the pool
-- process will also 'cancel' the process (just to make sure...)
-- and cleanup the internal 'Broker'.
module RIO.ProcessPool
( -- | A process that receives messages and dispatches them to
-- a callback.
-- Each message must contain a /key/ that identifies a resource.
-- That resource is created and cleaned by user supplied
-- callback functions.
module RIO.ProcessPool.Broker,
-- | A process that receives messages and dispatches them to
-- other processes.
-- Building directly on "RIO.ProcessPool.Broker", it provides
-- a central message box 'Input', from which messages are
-- are delivered to the corresponding message box 'Input's.
module RIO.ProcessPool.Pool,
-- | Re-export.
module UnliftIO.MessageBox,
)
where
import RIO.ProcessPool.Broker
( BrokerConfig (..),
BrokerResult (..),
Demultiplexer,
MessageHandler,
Multiplexed (..),
ResourceCleaner,
ResourceCreator,
ResourceUpdate (..),
spawnBroker,
)
import RIO.ProcessPool.Pool
( Pool (..),
PoolWorkerCallback (..),
removePoolWorkerMessage,
spawnPool,
)
import UnliftIO.MessageBox