Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 为什么我的Yesod测试并行进行时会慢得多?_Haskell_Ghc_Yesod - Fatal编程技术网

Haskell 为什么我的Yesod测试并行进行时会慢得多?

Haskell 为什么我的Yesod测试并行进行时会慢得多?,haskell,ghc,yesod,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 real 0m15.266s user 0m40.032s sys 0m19.880s 而time.stack work/dist/x86_64-linux/Cabal-1.22.5.0/build/test

在具有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
real    0m15.266s
user    0m40.032s
sys 0m19.880s
time.stack work/dist/x86_64-linux/Cabal-1.22.5.0/build/test/test+RTS-N8
报告:

real    0m10.368s
user    0m8.592s
sys 0m2.056s
real    0m15.266s
user    0m40.032s
sys 0m19.880s
要复制:在
描述“主页”
之后运行
堆叠新partest yessod simple
,将
复制项目500
添加到
测试/处理程序/HomeSpec.hs
,并在
partest.cabal
中将
ghc选项设置为
-Wall-rtsopts-threaded

为什么会这样?我认为这应该从并行性中获益——我想不出线程会争夺什么资源
yesod测试
甚至不会启动真正的服务器。从测试中删除文件上载不会对结果产生实质性影响


这是一个最小化的示例。我最初的问题是在一个更大的应用程序中,通过
-N
似乎根本不能使测试并行运行。所以我的另一个问题是:YesSOD中是否存在阻止并行性的东西?多个线程同时访问数据库会使一些测试无效,但我想自己解决这个问题。(简单的
模板没有DB,所以这不可能是问题所在。)

我对此不太了解,但据我所知,您通常应该只告诉GHC实际内核的数量,而不是超线程虚拟内核的数量。不,我不知道为什么。