【发布时间】:2018-04-25 01:15:22
【问题描述】:
我编写了一个以 Unix 实用程序方式工作的 Haskell 程序 - 你启动程序,它完成工作,然后退出。 我在那个程序中使用了并发,但要让它真正并发,必须分别编译它,此外,让我惊讶的是,启动带有一些附加参数的编译程序。 我编译它:
ghc -O2 -threaded --make Main.hs -o Main.parallel
当我这样运行它时,它似乎可以并行工作:
./Main.parallel ds_houses/task.txt 8 500000 1:+1 +RTS -N8
./Main.parallel ds_houses/task.txt 8 500000 +RTS -N8
./Main.parallel ds_houses/task.txt 8 +RTS -N8
./Main.parallel ds_houses/task.txt +RTS -N8
我使用参数8、500000 和1:+1,因为我在shell 脚本中看到了它们here。
我将第一个参数理解为 CPU 的核心,但其他参数是什么? /usr/bin/time 程序似乎没有使用这些参数,因为如果将 %C 添加到其格式中,这些参数将显示为基准程序的参数。
有人可以解释或指出这些论点的作用吗? 我的假设是真的吗,一个人的 Haskell 编译程序不仅接受程序员期望的参数,还接受转发给 Haskell 运行时的其他参数?
【问题讨论】:
-
+RTS之前的参数表示您要求程序对它们做什么。如果你的程序中没有getArgs,它们都会被忽略。
标签: shell haskell concurrency command-line-arguments