C로 작은 수치 시뮬레이션을하고 있습니다. (내 고문과 공유하기 위해 C에서 수행해야했습니다.)하지만 "haskell 스크립트"를 사용하여 정리하고 싶습니다. 시뮬레이션. 이 프로그램은 몇 가지 명령 줄 인수를 받아 I 파일로 리디렉션하고 싶은 몇 가지 출력을 내뿜으며, 그래서 나는이 같은 짓 :하스켈 - System.Process 및 mutithreading에 대한 몇 가지 질문
: I 출력 파일의 이름을 생성하는 기능을 가지고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 초 만에 실행됩니다. 이것은 일어나서는 안됩니다.
그래서, 내 질문은 :
1) 난 그냥 1000 개 프로세스가 동시에 실행되는 던졌다나요 ??? 합리적 순서로 순차적으로 또는 한 번에 몇 개의 프로세스 만 실행할 수있는 방법은 무엇입니까?
2) 저는 이것을 쿼드 코어에서 실행하고 있습니다. 이걸 내 호의에 사용하는 것이 좋을 것 같습니다. 이 -threaded
플래그로 이것을 컴파일하고 동시 적으로 실행되지만 체계적으로 처리 할 수있는 방법이 있습니까?
'forkIO'를 (를) 지정해 주셔서 감사합니다. 나는 그것을 당신의 제안을 사용하여 동시에 실행하도록 만들었다. 아주 좋아! 내 첫번째 멀티 코어 프로그램! 하하 ... –
현재 페이지 도움 : http://haskell.org/haskellwiki/Haskell_for_multicores –
마지막으로 제쳐두고 입력하지 않습니다; 'mapM_ = (.) sequence_. 지도 '가 더 정확할 것입니다. – ephemient