@RoflanDaniil

Что происходит при вызове программы?

Допустим программа получает данные на входе и отдает не выходе. Программа на с++(не сильно важно, но для примера лучше язык без прослойки). Ничего не ждет, выполняется так быстро как может. Программа часть большой системы и используется для вычеслений, вызываясь другими программами (очень часто). Время вычисления около 5000 мс.
Что происходит, когда программа вызывается ?
Насколько быстрая эта операция ?
Возможно лучше повесить программу и ждать, пока будут приходит данные? Примерно так:
while(true) {
   cin >> in
   // вычисление
   cout << out
}

А если во время одного вычисления еще нескольким программам понадобится вызов данной ? В итоге выстроится очередь и будут очень долго ждать.
Тогда возможно нужно запустить программу в нескольких экземплярах ?( если алгоритм однопоточный).
А если удастся разбить на треды, то лучше разбивать или запускать несколько экземпляров ?
  • Вопрос задан
  • 968 просмотров
Решения вопроса 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
У вас один вопрос, или сотня?
При запуске программы вызывается системный вызов типа fork. При этом система дублирует адресное пространство процесса и подменяет его новым кодом, грузит библиотеки, инициализирует стек, память поцесса, открывает пути ввода/вывода. Как видите, накладных расходов куча и маленькая тележка. Операционные системы как могут, оптимизируют это дело, до какого-то предела. Поэтому все стараются избегать запуска процессов очень часто.
Что же нам теперь делать? Запустить несколько одинаковых процессов (воркеры) которые будут слушать очередь команд и выполнять нужные нам действия, а мы будем регулировать загрузку системы добавляя или убирая количество воркеров.
Так на чем же принято делать эти очереди? Можно на IPC системы, сокетах, очереди, мьютксы и семафоры. А можно на специальном ПО типа rabbitmq, zeromq, или даже на redis с его pub-sub.
Кажется на какой-то вопрос я не ответил....
А да, что выбрать? IPC или готовую очередь? Я выбираю отлаженные библиотеки!
И да, есть еще треды, они на порядок легче процессов, а есть еще сопрограммы coroutines, они легче тредов, но у всего есть плюсы и минусы.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы