zoukankan      html  css  js  c++  java
  • 1 pypy 和 pthon 区别

    其实就是解释执行与编译执行的区别

    PyPy是Armin Rigo开发的,Python语言的动态编译器,是Psyco的后继项目。 PyPy的目的是,做到Psyco没有做到的动态编译。

    PyPy开始只是研究性质的项目。 但是开发非常成熟,在2007年中旬发布了1.0 Release版本后,大家关注的焦点是,能否在2008年出现可供生产环境使用的版本。

     编译执行,顾名思义,要先编译再执行,这里需要有一个编译器,来将我们的代码全部编译成机器代码,然后进行执行。因为先整体进行编译,所以这里会生成编译后的机器代码。
    
      解释执行,则是需要一个解释器,它会将我们的一句句解释成机器代码来执行,可以认为是,解释一句,执行一句。在这个过程中,不会生成中间文件。
    
      通过对比发现,编译执行,只需要编译一次,多次运行。而解释执行的话,没运行一次程序,都要经过解释器的解释过程。
    

      

    针对优缺点,可以从以下几个方面分析。

    从启动效率来看,解释执行不需要进行编译操作,而编译执行,要经过编译过程。解释执行启动速度更快。

    从运行效率来看,因为编译执行只需要编译一次,以后再运行就无需编译,而解释执行每次都要经过解释过程,所以编译执行效率更高。

    从内存使用方面来看,编译执行需要生成编译后的机器码文件,而解释执行时逐句解释执行,所以解释执行对内存占用更少。

    从跨平台的角度来看,因为解释执行每次可以根据不同的平台进行解释,例如js在linux和windows都可以运行,而C语言在windows下编译后的文件,只能在windows下才行执行。

     

    模拟多线程操作 证明结论

    1.1 python 运行的话 按照代码逻辑应该是0 但是最终输出的结果却不是0 每次结果都不一样

    说明 python 运行大量并发 会出现混乱

    import threading
    
    num=0
    
    def change_it(n):
        global num
        for i in range(1000000):
    
            num = num + n
            num = num - n
        print(num)
    
    threass=[
        threading.Thread(target=change_it,args=(8,)),  #
        threading.Thread(target=change_it,args=(10,)),
    
    ]
    
    [ t.start() for t in threass   ]
    
    [ t.join() for t in threass   ]
    
    print(num)
    

      

    但是使用pypy3 运行就不会出现代码混乱 但是 运行时间比python长

     

    用python 和 pypy3 测试一下代码运行时间即可知道



     

    import time
    s1=time.time()
    
    ss=[ i**2 for i in range(10000000)]
    print('运行时间',time.time()-s1)
    

      

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    HDU 5744
    HDU 5815
    POJ 1269
    HDU 5742
    HDU 4609
    fzu 1150 Farmer Bill's Problem
    fzu 1002 HangOver
    fzu 1001 Duplicate Pair
    fzu 1150 Farmer Bill's Problem
    fzu 1182 Argus 优先队列
  • 原文地址:https://www.cnblogs.com/zhangshijiezsj/p/14146231.html
Copyright © 2011-2022 走看看