Python es un lenguaje de alto nivel (que C o C++), por lo que el propio Python administra los detalles de un programa, como la asignación de memoria, la desasignación de memoria, los punteros, etc. Esto facilita la escritura de códigos en Python para los programadores. El código de Python se compila primero en código de bytes de Python. La conversión del intérprete de Byte Code ocurre internamente y la mayor parte está oculta para el desarrollador. El código de bytes es una programación de nivel inferior e independiente de la plataforma. La compilación del código de bytes es para acelerar la ejecución del código fuente. El código fuente compilado en código de bytes se ejecuta en la máquina virtual de Python uno por uno para llevar a cabo las operaciones. La máquina virtual es un componente interno de Python.
Internamente, el código Python se interpreta durante el tiempo de ejecución en lugar de compilarse en código nativo, por lo que es un poco más lento.
Ejecución del script de Python frente a la ejecución del código C/C++:
Python: Primero se compila en Byte Code. Este código de bytes luego es interpretado y ejecutado por la PVM (máquina virtual de Python).
C/C++: el código fuente se compila en código binario que la CPU puede ejecutar directamente, lo que los hace más eficientes.
Razones principales por las que Python es lento:
- Ser interpretado: a diferencia de los lenguajes nativos como C/C++, el código de Python se interpreta en tiempo de ejecución en lugar de compilarse en código nativo en tiempo de compilación. Python es un lenguaje interpretado, lo que significa que el código de Python que escribimos debe pasar por muchas, muchas etapas de abstracción antes de que pueda convertirse en un código de máquina ejecutable.
- Compilador Just In Time (JIT): otros lenguajes interpretados como el código de bytes Java/.NET se ejecutan más rápido que el código de bytes de Python porque su distribución estándar incluye un compilador JIT que compila el código de bytes en código nativo en tiempo de ejecución. Python no tiene un compilador JIT porque la naturaleza dinámica de Python hace que sea difícil escribir uno. Es imposible decir qué tipo de parámetros se pasarán a una función, lo que dificulta un poco la optimización.
- Bloqueo de intérprete global (GIL): evita los subprocesos múltiples al obligar al intérprete a ejecutar solo un subproceso dentro de un solo proceso (es decir, una instancia del intérprete de Python) a la vez.
Publicación traducida automáticamente
Artículo escrito por imsushant12 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA