当前位置:首页 > 科技  > 软件

一文看懂,为什么 Python 运行速度如此慢?

来源: 责编: 时间:2024-06-05 17:43:15 283观看
导读在编程社区中,众所周知Python编程语言在速度方面并不占优势。"但是就是慢..."在这篇文章中,我将介绍Python的不同特性,我们将了解为什么这使其成为当今最完整的语言之一,但速度不够快。但首先,让我们掌握一些关于编程语言

在编程社区中,众所周知Python编程语言在速度方面并不占优势。li328资讯网——每日最新资讯28at.com

"但是就是慢..."li328资讯网——每日最新资讯28at.com

在这篇文章中,我将介绍Python的不同特性,我们将了解为什么这使其成为当今最完整的语言之一,但速度不够快。但首先,让我们掌握一些关于编程语言的基本知识。li328资讯网——每日最新资讯28at.com

li328资讯网——每日最新资讯28at.com

li328资讯网——每日最新资讯28at.com

抽象级别

正如我们可能知道的那样,编程语言通常根据其抽象级别进行描述。li328资讯网——每日最新资讯28at.com

  • 低抽象级别表明该语言更接近硬件(难以解释)
  • 高级别表示代码更接近用户(易于解释)。

li328资讯网——每日最新资讯28at.com

抽象级别(从硬件到现代编程语言)li328资讯网——每日最新资讯28at.com

C++、PHP、Java、Python等都被认为是现代(或高级)编程语言,因为它们可以在几乎任何类型的系统上运行。在汇编语言中,我们必须根据每个特定处理器的指令编写不同的程序(无法在不同的CPU上运行相同的代码)。例如,如果我们创建一个打印“Hello world”的程序并将代码发送给我们的朋友(他有不同的计算机型号),当他尝试执行它时,它可能会失败。li328资讯网——每日最新资讯28at.com

li328资讯网——每日最新资讯28at.com

现代语言:金字塔的最后抽象层

li328资讯网——每日最新资讯28at.com

li328资讯网——每日最新资讯28at.com

现代语言抽象li328资讯网——每日最新资讯28at.com

尽管是离机器码最高的抽象,但在金字塔的最后一层也有层次结构。一方面,我们可以找到过程化语言,如C,我们需要逐步知道自己在做什么。这具有非常高效的优点,但缺点是复杂且不够灵活。另一方面,其他语言通过让我们使用更易读和灵活的代码来简化任务。这就是Python的情况。我们几乎可以用它做任何事情,而且易于实现,但在某些任务上效率不高。li328资讯网——每日最新资讯28at.com

li328资讯网——每日最新资讯28at.com

但为什么Python确切地说是“慢”呢?li328资讯网——每日最新资讯28at.com

li328资讯网——每日最新资讯28at.com

让我们回顾一些语言特性以回答这个问题。li328资讯网——每日最新资讯28at.com

li328资讯网——每日最新资讯28at.com

解释性语言

首先,Python是一种解释性语言,这意味着代码由软件程序(称为解释器)逐行读取和执行,在运行时进行。这是将代码转换为机器代码的一种方式。li328资讯网——每日最新资讯28at.com

li328资讯网——每日最新资讯28at.com

编译型语言

另一种使代码“为机器可理解”的方式是通过编译过程。在这种情况下,源代码在实际在计算机上运行之前通过编译器转换为机器代码。li328资讯网——每日最新资讯28at.com

li328资讯网——每日最新资讯28at.com

li328资讯网——每日最新资讯28at.com

编译型与解释型语言li328资讯网——每日最新资讯28at.com

为什么解释性方式更慢?

在解释性语言中,源代码的每一行在执行过程中都会即时转换为机器代码。这意味着每次程序运行时,解释器必须解析、分析和执行代码,这增加了与直接运行预编译机器代码相比的开销。例如:如果某段代码运行多次(例如,在循环内),解释器必须每次遇到时读取和转换它。相反,编译程序将直接运行机器代码,无需在通过循环时重新翻译它。li328资讯网——每日最新资讯28at.com

li328资讯网——每日最新资讯28at.com

CPython及其全局解释器锁(GIL)

标准的Python解释器是CPython。它由C和Python编写,将Python代码编译成字节码,然后进行解释。为了防止多个本机线程同时执行Python字节码,CPython使用全局解释器锁。这个锁是必要的,因为CPython的内存管理不是线程安全的。然而,在多线程程序中,它可能是一个显著的瓶颈,限制了在多核处理器上进行多线程的性能提升。li328资讯网——每日最新资讯28at.com

li328资讯网——每日最新资讯28at.com

li328资讯网——每日最新资讯28at.com

全局解释器锁的工作流程li328资讯网——每日最新资讯28at.com

li328资讯网——每日最新资讯28at.com

动态类型

此外,Python是动态类型的,这意味着在初始化变量时不需要声明变量的类型。这对效率有何影响呢?嗯,在动态类型语言中,类型是在运行时确定的。这意味着解释器需要在执行代码片段时进行类型检查。这需要额外的处理来确定每个变量的类型以及根据这些类型执行操作的方式。而动态类型语言的对立面是什么?li328资讯网——每日最新资讯28at.com

li328资讯网——每日最新资讯28at.com

静态类型语言

在这种情况下,变量的类型在编译时而不是在运行时确定。因此,类型在编译时已知,编译器可以更激进地优化代码执行。这导致更快但不够灵活的程序。一些采用这种方法的语言包括C++和Rust。li328资讯网——每日最新资讯28at.com

li328资讯网——每日最新资讯28at.com

li328资讯网——每日最新资讯28at.com

静态类型与动态类型语言li328资讯网——每日最新资讯28at.com

li328资讯网——每日最新资讯28at.com

垃圾收集

垃圾收集是一种编程语言运行时系统用于回收程序不再使用的内存的自动内存管理形式。Python通过垃圾收集自动管理其对象的内存分配和释放。它使用的主要垃圾收集方法是引用计数。Python中的每个对象都有一个引用计数,即指向它的引用数量。当引用计数降至零,即不再有指向该对象的引用时,它会立即从内存中删除。li328资讯网——每日最新资讯28at.com

li328资讯网——每日最新资讯28at.com

li328资讯网——每日最新资讯28at.com

垃圾收集器的工作流程li328资讯网——每日最新资讯28at.com

li328资讯网——每日最新资讯28at.com

然而,垃圾收集是一把双刃剑...li328资讯网——每日最新资讯28at.com

它通过自动清理未使用的对象极大简化了内存管理,有助于防止由于手动内存管理导致的内存泄漏和其他错误。但它引入了开销和不可预测性,可能影响应用程序的性能。li328资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-92126-0.html一文看懂,为什么 Python 运行速度如此慢?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: C# new 关键字的三种用法

下一篇: 模拟实现.NET中的Task机制:探索异步编程的奥秘

标签:
  • 热门焦点
  • K60至尊版狂暴引擎2.0加持:超177万跑分斩获性能第一

    Redmi的后性能时代战略发布会今天下午如期举办,在本次发布会上,Redmi公布了多项关于和联发科的深度合作,以及新机K60 Ultra在软件和硬件方面的特性,例如:“K60 至尊版,双芯旗舰
  • Mate60手机壳曝光 致敬自己的经典设计

    8月3日消息,今天下午博主数码闲聊站带来了华为Mate60的第三方手机壳图,可以让我们在真机发布之前看看这款华为全新旗舰的大致轮廓。从曝光的图片看,Mate 60背后摄像头面积依然
  • 跑分安卓第一!Redmi K60至尊版8月发布!卢伟冰:目标年度性能之王

    8月5日消息,Redmi K60至尊版将于8月发布,在此前举行的战略发布会上,官方该机将搭载搭载天玑9200+处理器,安兔兔V10跑分超177万分,是目前安卓阵营最高的分数
  • 摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • Automa-通过连接块来自动化你的浏览器

    1、前言通过浏览器插件可实现自动化脚本的录制与编写,具有代表性的工具就是:Selenium IDE、Katalon Recorder,对于简单的业务来说可快速实现自动化的上手工作。Selenium IDEKat
  • 从 Pulsar Client 的原理到它的监控面板

    背景前段时间业务团队偶尔会碰到一些 Pulsar 使用的问题,比如消息阻塞不消费了、生产者消息发送缓慢等各种问题。虽然我们有个监控页面可以根据 topic 维度查看他的发送状态,
  • 企业采用CRM系统的11个好处

    客户关系管理(CRM)软件可以为企业提供很多的好处,从客户保留到提高生产力。  CRM软件用于企业收集客户互动,以改善客户体验和满意度。  CRM软件市场规模如今超过580
  • 之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • “买真退假” 这种“羊毛”不能薅

    □ 法治日报 记者 王春   □ 本报通讯员 胡佳丽  2020年初,还在上大学的小东加入了一个大学生兼职QQ群。群主“七王”在群里介绍一些刷单赚
Top