我在C中有一个小的数值模拟(我不得不在C中与我的顾问共享它),但我想使用“haskell脚本”模拟。该程序接受一些命令行参数,并吐出一些输出,我想重定向到一个文件,所以我做了这样的事情:Haskell - 关于System.Process和多线程的一些问题
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'。我设法使用您的建议同时运行。非常好!我的第一个多核计划!哈哈哈... – 2010-01-19 17:10:12
顺便说一句,这页提供帮助:http://haskell.org/haskellwiki/Haskell_for_multicores – 2010-01-19 17:10:44
你最后一边不打字; mapM_ =(。)sequence_。地图“会更准确。 – ephemient 2010-01-20 17:20:10