最近在梳理python的一些知识,本文通过简单分析,给出python和java背后跨平台背后的原理,以及python、java、c性能差距的原因。

原理部分: python/java/c执行的背后




python 跨机器队列 python跨平台原理_码 python

python/c/java



python程序执行的背后: 先将源代码编译成字节码,字节码发送到PVM(python虚拟机),PVM执行这些字节指令。

所谓字节码是经过编译的,但与操作系统无关的,需要虚拟机转译后才能成 为机器码的中间代码。

从这点看, python和java类似,都是先编译成字节码,然后通过虚拟机,来实现的跨平台可移植性。但python是动态类型语言,一个变量引用的类型只有在运行时才能确定,编译出来的pyc字节码没有变量的类型信息,需要在PVM转译时来确定类型信息,而Java是静态类型语言,JVM只负责转译,没有确定类型的负担,所以Java的执行速度比Python快。

而C语言,因为直接编译成机器码,生成可执行程序。该可执行程序只能在某平台上运行。正因为直接编译成机器码,程序的性能是最好的,牺牲的是可移植性,同一份代码其他平台上需要重新编译,甚至改写代码。

实践部分: hello

python最方便, python hello.py即可执行。其中utils.pyc是自动编译出来的字节码。




python 跨机器队列 python跨平台原理_码 python_02

hello python



java次之, 需要javac编译,生成Hello.class字节码:




python 跨机器队列 python跨平台原理_python_03

hello, java



C语言繁琐一些,需要更多的命令:编译、汇编、链接,生成最终的可执行程序。其中hello.s为编译出来的汇编代码。




python 跨机器队列 python跨平台原理_java_04

hello c



总结

字节码使得跨平台成为可能,动态类型进一步解放了程序员的双手,是代码更简洁。开发效率高是Python的战略优势。

Java作为静态类型语言,既能跨平台,有保证相对的性能,比较中庸。

C,直接编译成机器码,高性能是其战略优势。汇总如下:




python 跨机器队列 python跨平台原理_python_05

总结