Я программирую в C и используя bash как свою оболочку. В настоящее время я пытаюсь оптимизировать, когда запускаю свою программу. Общий смысл программы заключается в том, чтобы ввести некоторые параметры, прочитать в файле данных, а затем программа выполняет некоторые вычисления на основе входных параметров и данных из файла. Я часто запускаю этот код по 100 раз за раз, изменяя только входные параметры для каждого прогона, а не данные из файла. Я делаю это с использованием сценария оболочки для xargs
исполняемого файла с различными параметрами.Повторное использование/сохранение чтения в массивах данных между прогонами в C
printf "%s\n" {0..n} | xargs -P 8 -n 1 ./program
Проблема в том, у меня есть очень большой файл данных, который занимает около> 1 секунды, чтобы читать. Это делается при каждом обращении к исполняемому файлу, однако, часто данные, которые считываются не изменение! Поэтому я считаю, что я мог бы сэкономить много времени, сохранив эти данные так, чтобы другие вызовы исполняемого файла могли использовать данные, которые уже были прочитаны, вместо того, чтобы тратить время на чтение самих данных.
Я думал, может быть, может быть другая программа, которая читает данные, а затем защищает и отправляет адрес данных моим текущим исполняемым файлам. После того, как исполняемые файлы закончили работать полностью, это будет передано обратно в новую программу, которая затем высвободит данные. Это возможно? Или есть другой способ, который был бы выше?
Я бы удостоверился, что файл данных оптимизирован для быстрого чтения (т. Е. Вместо того, чтобы обрабатывать любой из них). Вы можете изучить 'fork()', где родительский процесс считывает данные и «автоматически» передает его дочерним процессам. Родитель должен был бы нести ответственность за вызов ребенка сколько угодно раз и с разными аргументами. –
Еще одна возможность - использовать общую память - сначала запустить одну программу, которая считывает данные и создает общий вид. Другая программа может отображать эту общую память и обрабатывать ее, а также удалять ее, когда это будет сделано. Наконец, первый процесс может затем освободить эту память. –
Хороший вопрос. Мне нелегко ответить, хотя я предполагаю, что можно запустить демон, который хранит данные в сегменте разделяемой памяти. Я правильно делаю вывод, что ваш файл данных занимает намного больше 1 секунды, чтобы загрузить при первом запуске вашей программы? Это займет 1 секунду только после того, как система заменила файл на память? – thb