Каковы преимущества многопроцессорной обработки, когда у нас уже есть многопоточность? - PullRequest
1 голос
/ 09 августа 2011

Я не уверен, повысит ли производительность использование нескольких процессов для веб-приложения. В mod_wsgi в Apache предусмотрена опция для установки количества процессов, запускаемых для группы процессов демона. Ранее я использовал fastcgi с lighttpd, и у него также была возможность настроить максимальное количество процессов для каждого приложения fastcgi.

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

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

Ответы [ 2 ]

4 голосов
/ 10 августа 2011

В случае Python или, более конкретно, CPython, который используется mod_wsgi, проблема заключается в Python GIL. Хотя у вас может быть несколько потоков в Python, глобальная блокировка интерпретатора фактически означает, что только один поток может одновременно выполнять код Python. Это означает, что он не может правильно использовать несколько процессоров / ядер в системе. Однако использование нескольких процессов позволяет использовать все эти процессоры / ядра.

Тем не менее, для mod_wsgi это не весь код Python, но имеет много кода на C, а Apache также является кодом на C. Во время выполнения кода на C этот поток разблокируется GIL, что означает, что поток, работающий в коде C, может работать параллельно с потоком, работающим в коде Python. Все еще не лучшее, чего можно достичь, но все же можно частично использовать все процессоры / ядра в вашей системе.

Для меня подробности об этом по отношению к mod_wsgi читайте:

http://blog.dscpl.com.au/2007/09/parallel-python-discussion-and-modwsgi.html http://blog.dscpl.com.au/2007/07/web-hosting-landscape-and-modwsgi.html

3 голосов
/ 09 августа 2011

Многопроцессорная обработка менее эффективна, чем многопоточность, но она более устойчива к сбоям.Каждый процесс получает свое независимое пространство памяти и может быть остановлен и перезапущен (перезапущен) независимо от других процессов.

...