У меня есть небольшое числовое моделирование в C (я должен был сделать это в C, чтобы поделиться им с моим советником), но я хочу использовать «скрипт haskell» как вещь для организации моделирование. Программа принимает некоторые аргументы командной строки и плюет некоторый вывод, я хотел бы перенаправить в файл, так что я сделал что-то вроде этого:Haskell - Некоторые вопросы о System.Process и mutithreading
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'. Мне удалось запустить его одновременно с использованием вашего предложения. Очень хорошо! Моя первая многоядерная программа! Hahahah ... –
BTW, эта страница помогла: http://haskell.org/haskellwiki/Haskell_for_multicores –
Ваш последний отзыв не набирает; 'mapM_ = (.) sequence_. карта "была бы более точной. – ephemient