我有一个用C语言写成的小型数字模拟程序(我必须用C语言编写以与我的导师分享),但我想使用类似“Haskell脚本”的东西来组织模拟。该程序接受一些命令行参数并输出一些内容,我想将其重定向到一个文件中,因此我做了如下操作:
import Control.Monad
import System.Process
我有一个创建输出文件名称的函数:
filename :: Int -> String
filename n = some stuff here...
我想要运行的命令是:
command :: Int -> String
command n = "./mycutesimulation " ++ show n ++ " >" ++ filename n
最后,我列出要运行的任务列表,并使用 runCommand
命令来运行它们:
commands = map command [1,2..1000]
main = do
sequence_ $ map runCommand commands
问题在于,我运行这个“脚本”后,我的电脑几乎会因为负载而冻结。正在执行的程序在内存使用方面非常轻便,并且在一瞬间就能运行。这不应该发生。
所以,我的问题是:
1)我刚才是把1000个进程同时执行了吗?如何按顺序执行它们——顺序执行或每次只执行几个进程?
2)我正在四核处理器上运行它,如果能利用这个优势就太好了。有没有办法使用
-threaded
标志编译它,并以有组织的方式并发执行进程?
forkIO
。我按照你的建议成功地实现了并发运行。非常好!这是我的第一个多核程序!哈哈哈... - Rafael S. CalsaverinimapM_ = (.) sequence_ . map
更为准确。 - ephemient