阿里巴巴杨群:高并发场景下Python的性能挑战

阿里云数据库专家杨群在2019 Python开发者日分享了Python在高并发场景下的性能挑战,主要涉及GIL、解释器、动态语言等方面。尽管Python有性能短板,但在许多应用中其优雅简洁的语法仍具吸引力。优化策略包括选择适合的web框架、利用多进程减少GIL影响、使用异步IO框架和PyPy等JIT编译器,以及缓存、懒加载等技术。
摘要由CSDN通过智能技术生成

嘉宾|杨群

出品|Python大本营(ID:pythonnews)

导读:阿里云数据库提供了稳定可靠、可弹性伸缩的在线数据库服务,在数据库存储引擎、云原生技术、分析引擎、分布式处理、FPGA/GPU硬件加速、智能数据库、智能化管控平台、安全数据库等方面有较好的表现。


4月13日,在CSDN主办的“2019 Python开发者日”大会上,阿里云数据库专家杨群分享了《高并发场景下Python的性能挑战》的主题演讲。

       640?wx_fmt=jpeg       

以下为演讲整理,文章略有删减:

 

性能问题


(一)GIL

 

为什么大家都说Python慢?最主要的原因是全局解释器锁。今天讲的Python是官方的C版Python。CPython在创建变量时,首先对变量分配内存,然后开始计数变量的数量,大家提出称之为“引用计数”。在引用计数变为0时,从系统中释放变量的内存。如果多个线程同时对这个计数做操作,线程不安全,会导致很多问题。

 

综合垃圾回收机制问题,CPython引入了GIL,同一个时刻在一个进程允许一个线程使用解释器,意味着单进程下Python多线程的性能没有那么好。这样做的好处在于能够避免死锁和数据用户安全方面的问题。

       640?wx_fmt=png      

Python有三种线程状态:Idle、Running、Failed GIL Acquire。曾经有人对GIL的性能影响做了两个测试。第一个测试案例是两个CPU密集线程,代码运行过程的大部分状态是Failed GIL Acquire,两个线程的运行没有达到双核的效果。

       640?wx_fmt=png      

第二个案例是IO密集型的线程。仔细分析发现,IO没有达到想象的预期效果。所以IO密集型和CPU密集型同时存在时,IO密集型未必达到想要的运算速度,我们要区分好IO密集型和CPU密集型的服务。

 

(二)解释器

 

CPython要首先生成pcy字节码序列,之后才能被CPU理解,所以较慢。JAVA、.NET也有中间的翻译,但因为JAVA和.NET使用即时编辑(JIT),使用JIT可以检测哪些代码执行得比较多,意味着计算机应用程序需要重复做一件事情的时候它就会更快。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值