-- |
-- Module : Main
-- Copyright : (c) 2018 Harendra Kumar
--
-- License : BSD3
-- Maintainer : harendra.kumar@gmail.com
import Control.Concurrent
import Control.Concurrent.Async
import Control.Monad (when)
import System.Random (randomRIO)
import Gauge
import Streamly
import qualified Streamly.Prelude as S
-------------------------------------------------------------------------------
-- Append
-------------------------------------------------------------------------------
{-# INLINE append #-}
append :: IsStream t => Int -> Int -> (t IO Int -> SerialT IO Int) -> IO ()
append tcount d t = randomRIO (1,1) >>= \x ->
let work = (\i -> when (d /= 0) (threadDelay d) >> return i)
in runStream
$ t
$ maxBuffer (-1)
$ maxThreads (-1)
$ S.fromFoldableM $ map work [x..tcount]
mkBgroup :: Int -> Int -> [Benchmark]
mkBgroup d n =
let work = (\i -> when (d /= 0) (threadDelay d) >> return i)
in [ bgroup "streamly"
[ bench "ahead" $ nfIO $ append n d aheadly
, bench "async" $ nfIO $ append n d asyncly
-- , bench "wAsync" $ nfIO $ append n d wAsyncly
-- , bench "parallel" $ nfIO $ append n d parallely
]
, bgroup "async"
[ bench "mapConcurrently_" $ nfIO $ mapConcurrently_ work [1..n]
, bench "mapConcurrently" $ nfIO $ mapConcurrently work [1..n]
]
]
main :: IO ()
main = do
defaultMain
[ -- bgroup "delay-0ms-1k" (mkBgroup 0 1000)
bgroup "delay-0ms-10k" (mkBgroup 0 10000)
{-
, bgroup "delay-0ms-100k" (mkBgroup 0 100000)
, bgroup "delay-1ms-1k" (mkBgroup 1000 1000)
, bgroup "delay-1ms-10k" (mkBgroup 1000 10000)
, bgroup "delay-1ms-100k" (mkBgroup 1000 100000)
, bgroup "delay-10ms-1k" (mkBgroup 10000 1000)
, bgroup "delay-10ms-10k" (mkBgroup 10000 10000)
, bgroup "delay-10ms-100k" (mkBgroup 10000 100000)
, bgroup "delay-100ms-1k" (mkBgroup 100000 1000)
, bgroup "delay-100ms-10k" (mkBgroup 100000 10000)
, bgroup "delay-100ms-100k" (mkBgroup 100000 100000)
, bgroup "delay-1000ms-1k" (mkBgroup 1000000 1000)
, bgroup "delay-1000ms-10k" (mkBgroup 1000000 10000)
, bgroup "delay-1000ms-100k" (mkBgroup 1000000 100000)
, bgroup "delay-5000ms-1k" (mkBgroup 5000000 1000)
-}
, bgroup "delay-5000ms-10k" (mkBgroup 5000000 10000)
-- , bgroup "delay-5000ms-100k" (mkBgroup 5000000 100000)
]