Подтвердить что ты не робот

Почему люди говорят, что Java более масштабируема, чем python?

Я видел этот аргумент в нескольких местах, и теперь, недавно, я увидел его снова на посту reddit. Это ни в коем случае не пламя против любого из этих двух языков. Я просто озадачен, почему существует такая плохая репутация, когда python не масштабируется.
Я парень-питон, и теперь я начинаю с Java, и я просто хочу понять, что делает Java настолько масштабируемой, и если настройка python, о которой я имею в виду, является хорошим способом масштабирования больших приложений на python.

Теперь вернемся к моей идее масштабирования приложения Python. Скажем, вы его кодируете с помощью Django. Django запускает свои приложения в режиме fastcgi. Итак, что, если у вас есть передний сервер Nginx и позади него столько же серверов, сколько необходимо, каждый из которых запускает ваше приложение Django в режиме fastcgi. Передний сервер Nginx будет загружать баланс между вашими серверами backang Django fastcgi. Django также поддерживает несколько баз данных, поэтому вы можете писать в одну основную БД, а затем читать со многих подчиненных устройств, опять же для балансировки нагрузки. Бросьте сервер memcached в этот микс, и там вы получите масштабируемость. Не так ли?

Является ли это жизнеспособной установкой? Что делает Java лучше? Как вы масштабируете приложение Java?

4b9b3361

Ответ 1

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

У Python есть глобальная блокировка интерпретатора (GIL), которая сильно ограничивает возможность масштабирования до многих потоков. Он освобождает его при вызове собственного кода (повторное его получение, когда возвращается native), но это все еще требует тщательной разработки при попытке записать масштабируемое программное обеспечение в Python.

Ответ 2

Пока я не согласен с утверждением, я полагаю, они считают, что Java более масштабируема, потому что она работает намного быстрее. JVM очень эффективен (за исключением, возможно, использования памяти). Также Python GIL (Global Interpreter Lock) не разрешает "настоящую" потоковую обработку, в то время как Java не имеет GIL и имеет истинную многопоточность.

Ответ 3

Не попадая в flamewar, подумайте, как Python обрабатывает многопоточные приложения по сравнению с Java? Например, какие глобальные блокировки существуют на обоих языках, которые повреждают concurrency (подсказка, Python GIL - Global Interpreter Lock)?

Ответ 4

Я думаю, что в этой статье суммируются многие аргументы о масштабировании и динамических языках:

http://blogs.tedneward.com/2008/01/24/Can+Dynamic+Languages+Scale.aspx

Стоит отметить два своих определения для масштабирования...

  • Размер проекта, как в строках кода (LOC)
  • Работа с пропускной способностью, так как она "должна масштабироваться до 100 000 запросов в секунду"

Часто используемый аргумент о любом масштабировании динамического языка заключается в том, что по мере роста базы кода становится сложнее реорганизовать его без поддержки IDE. Из-за отсутствия информации о типе во время компиляции эту поддержку часто невозможно реализовать на динамических языках.

Ответ 5

Hmmm - масштабируемое может означать много вещей - масштабируемое распределенной архитектурой, масштабируемое по скорости?

На масштабируемом по скорости фронте Java, как правило, может обрабатывать инструкции быстрее, чем python - для правильной проблемы, гораздо быстрее (я думаю, главная причина этого заключается в том, что Java компилируется, тогда как Python интерпретируется). С этой точки зрения, Java, как правило, может делать больше с меньшими затратами и, следовательно, более масштабируема.

Я ссылаюсь на свою исходную экспериментальную информацию на два источника; http://mrpointy.wordpress.com/2007/11/06/java-vs-python-performance/ и http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-groovy/

Ответ 6

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

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