为什么我的Yesod并行测试速度要慢得多?

时间:2016-09-30 18:59:30

标签: haskell ghc yesod

在具有8个虚拟核心的计算机上,time .stack-work/dist/x86_64-linux/Cabal-1.22.5.0/build/test/test +RTS -N1报告:

real    0m10.368s
user    0m8.592s
sys 0m2.056s

虽然time .stack-work/dist/x86_64-linux/Cabal-1.22.5.0/build/test/test +RTS -N8报告:

real    0m15.266s
user    0m40.032s
sys 0m19.880s

要重现:运行stack new partest yesod-simple,在replicateM_ 500之后将test/Handler/HomeSpec.hs添加到describe "Homepage",并将ghc-options中的partest.cabal设置为-Wall -rtsopts -threaded

这是为什么? ISTM认为这应该从并行性中获益 - 我无法想到线程会争夺的任何资源。 yesod-test甚至无法启动真实的服务器。从测试中删除文件上传不会对结果产生实质性影响。

这是一个最小化的例子。我最初的问题是在一个更大的应用程序中,似乎传递-N并不能使测试完全并行运行。所以我的另一个问题是:Yesod中是否存在阻止并行性的东西?一次访问数据库的多个线程会使某些测试无效,但我想自己解决这个问题。 (yesod-simple模板没有数据库,因此无法解决问题。)

0 个答案:

没有答案