У меня есть небольшое численное моделирование в 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
и получить процессы, которые будут выполняться одновременно, но организованно?