• 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)
    

      

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    【作业】第二周作业, 适合14级1/2班
    【作业】第二周作业,适合13级1/2/3班
    【组织】请13级1/2/3班,14级1/2班 将同学们的博客地址列个清单回复(按班级来)
    【组织】13级1、2、3班和14级1、2班 结对、分组情况请回帖
    【转】没什么能够阻挡,你对自由的向往
    【转】小屁孩, 懂个啥
    【转】远程结对编程实战:看看别人是怎么做的
    【转】看见成长的自己:斯坦福大学心理学教授徳韦克访谈
    【作业】第一周作业
    从std::thread::id取得int值id
  • 原文地址:https://www.cnblogs.com/zhangshijiezsj/p/14146231.html
Copyright © 2020-2023  润新知