0

это продолжение до this. (Вам не обязательно читать все ответы, только вопрос)Последующее наблюдение: многопроцессорность или многопоточность для программного обеспечения для моделирования Python

Люди объясняли мне разницу между процессами и потоками. С одной стороны, мне нужны процессы, чтобы я мог полностью использовать все ядро ​​процессора, с другой стороны, передача информации между процессами была менее идеальной, и я не хотел иметь две копии огромного объекта, с которым я работал с.

Так что я думал о способе сделать это, объединяя процессы и потоки; скажите мне, если это имеет смысл. Основным процессом в моей программе является процесс графического интерфейса. Я попрошу его создать поток «рендеринг-менеджер». Поток рендеринга-менеджера будет отвечать за рендеринг имитации, однако он не будет отображать их сам по себе, а порождает другие процессы, чтобы сделать для него работу.

Эти цели:

  1. Rendering должны воспользоваться всеми доступными ядрами.
  2. GUI никогда не должен становиться вялым.

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

Как вы думаете, это хороший дизайн? Есть ли у вас предложения по улучшению?

Update:

Извините за мой запутанным использование слова "визуализации". Посредством рендеринга я имею в виду вычислить симуляцию, а не отображать ее на экране.

+0

Duplicate: http://stackoverflow.com/questions/731993/multiprocessing-or-multithreading –

+0

Что на самом деле отличается от этого вопроса? Это ваш предыдущий вопрос снова и снова. –

+0

Здесь я предложил определенный дизайн, сочетающий потоки и процессы, и я хочу знать, хорошо ли это. Несколько раз я читал ответы на предыдущий вопрос. –

ответ

0

Главный процесс в моей программе - процесс графического интерфейса. Я попрошу его создать поток «рендеринг-менеджер». Поток рендеринга-менеджера будет отвечать за рендеринг имитации, однако он не будет отображать их сам по себе, а порождает другие процессы, чтобы сделать для него работу.

Я не специалист по графическим технологиям, но это очень похоже на то, для чего предназначены графические процессоры. Возможно, pygame - это еще что вы ищете?

+0

Я не понимаю ... GPU для чего? Я буду использовать графический процессор для рисования состояния симуляции на экране, но под «рендерингом» я имею в виду вычисление симуляций в соответствии с любыми мировыми законами для этой конкретной модели. Я думаю, что это будет на CPU. –

+0

Я думаю, что вы можете смущать людей своим использованием слова «render». Render довольно тесно связан с превращением данных в изображения для экрана. Возможно, было бы лучше просто описать это как «запустить симуляцию» или что-то подобное в вопросе. –

+0

Ты прав Крис. –

2

Перед использованием процессов, убедитесь, что:

  • Ваш алгоритм может быть распараллеливание между всеми процессорами.
  • Вам нужен этот параллелизм.

На мой взгляд, хорошее эмпирическое правило:

  1. Сделать работу.
  2. Сделайте все правильно.
  3. Сделайте это быстро.

Поэтому я предлагаю «просто» использовать потоки в первую очередь. Возможно, вы поймете, что даже с одним потоком, вычисляющим симуляцию, достаточно быстро.

+0

+1 для подхода 1-2-3. Хотя вы, вероятно, можете добавить 4. Поймите узкие места в другом месте и заставьте его снова работать ;-) –

Смежные вопросы