многопоточность или многопроцессорная обработка

Учитывая ваш контекст, я думаю, что было бы лучше использовать привязку.

Предполагается, что изображение Docker может быть многократно использовано в другом контексте, и построение всего изображения исключительно для конкретной конфигурации (т. Е. Среды) будет препятствовать этой цели:

  • вместо общего конфигурация, предоставляемая базовым образом, вы создаете образ для конкретной среды
  • каждый раз, когда вам нужно изменить конфигурацию, которая вам понадобится для восстановления всего образа, тогда как при монтировании с привязкой простой перезапуск или перечитывание файла конфигурации по приложению будет достаточно
  • Документация Docker рекомендует:

    Рекомендации Dockerfile

    Мы настоятельно рекомендуем использовать VOLUME для любых изменяемых и / или обслуживаемых пользователем частей вашего изображения.

    blockquote>

    Хорошие варианты использования для bind mounts

    Обмен файлами конфигурации с хост-машины на контейнеры.

    blockquote>

7
задан pinto 22 March 2009 в 21:01
поделиться

8 ответов

Зависит, на каком языке программирования Вы хотите использовать (и который библиотеки). Лично я выбрал бы многопоточность, поскольку я знаю проблемы, связанные с потоками (и как решить их).

Многопроцессорная обработка могла бы помочь Вам, если Вы хотите выполнить демона на нескольких машинах и распределить загрузку среди них, но я не думаю, что это - основная проблема здесь.

2
ответ дан 6 December 2019 в 06:38
поделиться

Вы не учли слишком много деталей. На самом деле, с точки зрения того, что Вы уже заявили, выбор не важен и нет ничего по сути большего количества багги о многопоточности, чем многопроцессорная обработка; Вы отсутствуете, почему эти методы имеют такую репутацию. Если Вы не обмениваетесь данными затем нет большой проблемы, которая будет иметься (конечно, могут быть некоторые другие проблемы, но нам нужны детали для решения о тех). Кроме того, имеет значение, какая платформа, на UNIX как операционные системы, процессы довольно легки так или иначе.

Однако существуют другие проблемы для рассмотрения? На какой системе (системах) Вы будете работать? Вы определенно не хотите порождать несколько процессов в однопроцессорной системе, поскольку Вы не собираетесь извлекать много пользы, в зависимости от некоторых других деталей, которые Вы могли указать. Если Вы описываете природу проблемы, Вы пытаетесь решить, мы можем помочь далее.

2
ответ дан 6 December 2019 в 06:38
поделиться

Они оба могут быть сложными и комплекс их собственными способами.

Можно сделать также. В главной схеме вещей это не могло бы иметь значения, который Вы выбираете. То, что действительно имеет значение, - то, как хорошо Вы делаете их. Поэтому:

Сделайте то, с чем Вы являетесь самыми опытными. Или если Ваше продвижение команды, сделайте то, с чем команда является самой опытной.

---Поточная обработка!---

Я сделал большое потоковое программирование, и я наслаждаюсь частями его и частями его, я не наслаждаюсь. Я изучил много и теперь могу обычно писать многопоточное приложение без слишком большого количества боли, но она действительно должна быть записана в очень особенном методе. А именно:

1) Это должно быть записано с очень ясно определенными границами данных, которые на 100% ориентированы на многопотоковое исполнение. Иначе, независимо от того, что условие, которое может произойти, произойдет, и это не могло бы быть, когда у Вас есть наложение отладчика вокруг.. Плюс отладка потокового кода похож на пиринг в поле Schrodinger... Путем взгляда там, другие потоки могут или не могли иметь времени для обработки больше.

2) Это должно быть записано с тестовым кодом, который подчеркивает машину. Много многопоточных систем только показывают свои ошибки, когда машины в большой степени подчеркнуты.

3) Должен быть некоторый очень умный человек, который владеет кодом обмена данных. Если будет какой-либо путь к ярлыку, который будет сделан, то некоторый разработчик, вероятно, сделает его, и у Вас будет ошибочная ошибка.

4) Должны быть всеобъемлющие ситуации, которые сбросят приложение с минимумом суеты. Это для производственного кода, который повреждается из-за некоторой проблемы поточной обработки. Короче говоря:Шоу должно продолжаться.

---Межпроцессный!---

Я имею меньше опыта с основанной на процессе поточной обработкой, но недавно делал некоторый межпроцессный материал в Windows (где IPC является вызовами веб-сервиса... ДОБЕЙТЕСЬ!), и это относительно чисто и просто, но я следую некоторым правилам здесь также. В общем и целом межпроцессное взаимодействие будет намного более безошибочным, потому что программы получают вход от внешнего мира очень хорошо.. и те транспортные механизмы являются обычно асинхронными. Так или иначе...

1) Определите ясные границы процесса и механизмы связи. Сообщение/обработка событий через, о, скажите, TCP или веб-сервисы или каналы или независимо от того, что прекрасно, пока границы ясны, и существует много кода проверки и проверки ошибок на тех границах.

2) Будьте подготовлены к узким местам. Прощение кода очень важно. Этим я имею в виду, иногда Вы не будете мочь записать в тот канал. Необходимо смочь повторно поставить в очередь и повторить те сообщения без приложения, блокирующего/бросающий исключение.

3) В целом будет намного больше кода, потому что перенос данных через границы процесса означает, что необходимо сериализировать его некоторым способом. Это может быть источником проблем, особенно когда Вы начинаете поддерживать и изменять тот код.

Надеюсь, это поможет.

21
ответ дан 6 December 2019 в 06:38
поделиться

Необходимо ли совместно использовать данные обновления между экземплярами, где обновления являются частыми, и IPC был бы слишком дорогим? В этом случае многопоточность, вероятно, лучше. Иначе необходимо весить, более ли устойчивость отдельных процессов или простота создания/коммуникации потока важны для Вас.

0
ответ дан 6 December 2019 в 06:38
поделиться

Если Вы хотите устойчивость, используйте многопроцессорную обработку.

Процессы совместно используют регистрирующуюся загрузку между ними. Рано или поздно регистрирующийся запрос поразит ошибку и разрушит регистратор. С многопроцессорной обработкой Вы только теряете один процесс и настолько только, что один запрос входа (который Вы, возможно, не обработали так или иначе из-за ошибки).

Многопоточность уязвима для катастрофических отказов, так как одна фатальная ошибка вынимает Ваш единственный процесс.

Mulit-обработка до некоторой степени более технически сложна, так как необходимо сбалансировать рабочую нагрузку по процессам, которые могут повлечь за собой общую память использования.

2
ответ дан 6 December 2019 в 06:38
поделиться

Один вопрос состоит в том, необходимо ли сделать также. Я не знаю детали Ваших требований, но единственное потоковое использование приложения select(2) может соответствовать Вашим потребностям и не иметь недостатки или процессов или потоков. Это требует, чтобы Вы смогли централизовать весь свой ввод-вывод в одно центральное место, наиболее вероятную диспетчеризацию другим модулям через обратные вызовы, но это не все это трудно, если у Вас нет большого количества библиотек, которые хотят сделать их собственный ввод-вывод и не могут быть реструктурированы таким образом.

0
ответ дан 6 December 2019 в 06:38
поделиться

Спасибо все для Вашей обратной связи.

Я выбрал мультиархитектуру процессов, подобную веб-серверу Apache. Процессы масштабируются приятно в системах мультипроцессора/ядра. Связь будет выполнена с каналами или сокетами.

Процессы будут готовы использовать в провыгребной яме, таким образом, не будет никакой нерестящейся стоимости процесса.

Хит производительности будет незначителен по сравнению с устойчивостью, которую я получу.

0
ответ дан 6 December 2019 в 06:38
поделиться

Наконец-то мы реализовали это как многопроцессорную систему с каналами для IPC и бухгалтерией, которая порождает процессы по мере необходимости. Подобно Apache httpd. Работает отлично.

0
ответ дан 6 December 2019 в 06:38
поделиться
Другие вопросы по тегам:

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