Критерий критерия Haskell для ленивого кодирования

Мы пытаемся сравнить бинарное кодирование с Criterion. Поскольку типы данных являются строгими, мы вполне можем сравнить процесс упаковки запроса.

Однако, сделав еще один шаг, попытавшись сравнить процесс кодирования (Request to ByteString) с помощью runPut, мы получим μs-результаты. Вероятно, это связано с ленивой оценкой тестовой строки.

encode = runPut . buildRqMessage

main = do

  randBytes <- getEntropy 1000000
  let !topicA = stringToTopic "performance-0"
  let !topicB = stringToTopic "performance-1"
  let !clientId = stringToClientId "benchmark-producer"
  let !bytes = [randBytes | x <- [1..1]]
  let !head = Head 0 0 clientId
  let !prod = [ ToTopic topicA [ ToPart 0 bytes ] ]

  defaultMain [
      bgroup "encode" [
             bench "pack" $ whnf (packPrRqMessage head) prod
           , bench "pack+build" $ whnf encode (packPrRqMessage head prod)
        ]
    ]

Есть ли способ соответствующим образом оценить процесс кодирования?

0 ответов

Другие вопросы по тегам