Если вы начали писать код на python, и приведенный выше вопрос беспокоит вас, то это абсолютно нормально, если вы торчите вокруг этого поста, но скажите мне одну вещь: вы когда-нибудь видели, чтобы кто-то, кто пишет код на C/C++, говорил…это Вещь C.. Я говорю вам, что это так медленно, что я мог бы продолжить свой язык ассемблера, No Right? так что это не так, и питон сильнее в чертовски большем количестве аспектов, чем слаб в нескольких.

Теперь, даже прежде чем скулить о питоне или говорить вам правду.. У меня есть кое-что для вас, ребята.

Вышеупомянутая программа была написана на BrainFuck (PS: на самом деле скопирована для этой статьи), но скажите мне что-нибудь, насколько вероятно, что вы собираетесь выбрать такой язык? ’ на таких языках. Теперь, если бы вы написали то же самое на Python, знаете ли вы, как это будет легко… Что ж, позвольте мне показать вам

Просто слово, завернутое в кавычки и операторы печати, и бац!! вы приземлились со своим выходом. Теперь, даже если вы говорите о C/C++ или Java, вам нужно написать около 3–5 строк кода только для того, чтобы напечатать «Hello World!», так что, если кто-то просто поздоровается с миром, почему бы не сказать это простым способом. ?

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

Python имеет большое количество библиотек, которые могут делать что угодно… от создания веб-приложения до анализа чатов с вашим партнером.

Хорошо …. Я имею в виду анализ данных и ИИ (искусственный интеллект). У Python действительно хорошая документация и большое сообщество, способное решить почти все ваши проблемы.

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

  • Динамический тип
  • Интерпретируемый язык
  • GIL (не жабры, а GIL(GLOBAL INTERPRETER LOCK))

Динамический тип:

Динамически типизированный означает, что интерпретатор не знает тип переменной, которую он собирается выполнить, и это то, что происходит заранее в C (для сравнения), т.е. вы объявляете тип данных, а затем продолжаете работу с программой. Поэтому программа C знает тип данных, с которыми она собирается иметь дело, что экономит ее память и время, но это не относится, например, к python.

переменная = 5

var = «Статья среднего размера»

Здесь переменная с именем «var» изменила свой тип данных с целочисленного на строковый, но то же самое в C выдаст вам некоторую «ошибку конфликтующего типа». Предположим, вы запускаете цикл в python и C, теперь C знает тип переменных в цикле, и ему не нужно снова и снова проверять тип, но это не относится к python, даже если тип данных остается неизменным каждый раз, когда python проверяет тип переменной а затем переходит к необходимым подпрограммам, что делает его медленнее по сравнению с таким языком, как C, и это основная причина медленной работы python. Так что не расстраивайтесь, читатели… В Python есть Cython (C + Python), где типы данных известны, и это очень быстро.

Интерпретируемый язык:

Говоря о скомпилированном языке, перевод программы в машинный код (также известный как двоичные файлы) выполняется компилятором перед выполнением программы, а в случае интерпретируемого языка перевод выполняется во время выполнения программы. Термины интерпретируемые или скомпилировано не свойство языка, а свойство реализации. Однако эталонный код Python интерпретируется.

Если вы внимательно посмотрите на свои файлы, в которых вы запускаете свой код Python, вы можете получить папку __pycache__, в которой вы найдете файлы в формате .pyc или .pyo, и эти файлы содержат коды, на самом деле байт-коды файлов, которые помогают вашему файлу работать быстрее.

Теперь, если вы говорите о Java/.Net, в которой коды преобразуются в байт-коды, а JVM (виртуальная машина Java) читает байт-код, а компилятор JIT (Just In Time) преобразует код в машинный код, однако мы должны отметить тот факт, что Java — язык со строгой типизацией, что означает, что нам нужно объявить тип данных переменной, прежде чем переходить к коду.

JIT-компилятор python под репозиторием Pyjion говорит, что сделал предложение в версии python 3.6, однако в новых возможностях Python Release 3.6.0 его нет и работа, похоже, остановлена. Ну, здесь я говорю об эталонном питоне, CPython, в то время как другие версии, такие как PyPy, Jython и IronPython, имеют JIT-компиляторы. Однако CPython является реализацией общего назначения.

GIL (глобальная блокировка интерпретатора):

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

Таким образом, когда вы создаете программы с несколькими потоками в них, в действие вступает GIL. На самом деле интерпретатор позволяет запускать только один поток за раз, независимо от количества потоков, которые у вас есть, и это из-за глобальной блокировки интерпретатора, и это просто потому, что управление памятью CPython не является потокобезопасным, что означает, что если два потока одновременно увеличивают счетчик ссылок (количество раз, когда объект ссылается на объект) одного и того же объекта, счетчик ссылок может в конечном итоге стать равным увеличивается только один раз вместо двух. Другие версии Python с JIT-компилятором не имеют GIL, поскольку они выполняются потоками Java и имеют преимущество JVM. Таким образом, у python есть этот многопроцессорный модуль для продолжения выполнения нескольких задач. Но и там не так просто обрабатывать объект разделяемой памяти. Чтобы узнать все подробности о GIL, вы, ребята, можете прочитать

Вывод:

В заключение я хотел бы просто сказать о вопросе «Является ли python медленным или быстрым?»… вопрос в том, что для вас быстро, я имею в виду, что время доставки кода в python быстрее, чем в языках со статической типизацией, и, конечно, для игр это невозможно. можно использовать, но для науки о данных, веб-разработки, искусственного интеллекта у вас нет лучшего варианта, чем python, по крайней мере, на данный момент. Кроме того, Python — это просто язык, его реализация, которая использует JIT как Jython или другие версии, например. PyPy быстрее эталонной версии.

Ссылки:

http://jakevdp.github.io/blog/2014/05/09/why-python-is-slow/

Глобальная блокировка интерпретатора

Есть ли в интерпретаторе Python 3 функция JIT?

Способы сделать Python быстрее