APP下载
报价宝  ›  综合  › 

Python直译器PyPy新特色,让开发者自己控制垃圾回收时机以打造低延迟系统

报价宝 来源:baojiabao.com 发布时间:2019-01-06 11:33:00 09月11日更新
报价宝综合消息Python直译器PyPy新特色,让开发者自己控制垃圾回收时机以打造低延迟系统

讲求速度的Python的替代实作PyPy,最近合并了gc-disable分支,加入了支援低延迟回应特定事件的功能。不过,PyPy团队提到,这是非常专业的功能,一般PyPy的开发者可能用不到。

PyPy虚拟机器管理内存所使用的垃圾回收器(Garbage Collector),会定期扫描整个堆(Heap)找寻无法存取的物件,并释放相对应的内存空间。虽然这样的方式听起来成本高昂,但事实上,其管理内存的总成本却远远低于使用参照计数的CPython。官方提到,尽管违反直觉,但是非参照策略的主要优点是内存分配速度很快,特别是与基于malloc的分配器相比,而且解除分配年轻物件的成本趋近于零。

PyPy管理内存的总成本低于CPython,便是PyPy执行速度飞快的原因,但是这样的方式却存在很大的缺点,在CPython,内存管理的成本分散于程式执行之间,但是在PyPy中,内存管理成本却集中于垃圾回收器上,而这个成本造成可察觉的程式停顿,足以中断使用者程式的执行。

为了解决这个问题,从2013年开始,官方将垃圾回收器的工作拆分成一系列的步骤,使用者程式可以穿插在步骤间执行,但是偶发回应延迟高的问题依然严重,在实际执行应用程序的过程,应用程序回应时间高峰甚至长达350到450毫秒,而新加入的gc-disable就是要来解决这个问题。

gc-disable由主要由两个功能组成,gc.disable()与gc.collect_step()。gc.disable()会禁用垃圾回收器主要收集动作,但使用后内存使用量会无限成长,而gc.collect_step()是一个新函式,可用于手动执行单个增量式垃圾收集步骤。官方提到,gc.disable()仅禁用主要收集,而次要收集工作仍然会执行。 

由于JIT的虚拟化,许多具有短暂且可预测生命周期的物件不会被分配(Allocate),最终大多数寿命较短的物件仍然会像往常一样被回收,因此实际上gc.disable()的影响并不如想像的糟糕。开发者应用这两项功能,可以控制应用程序在可接受的情况下执行。

官方提醒,使用gc.disable()并不会让应用程序神奇的加速,而是把垃圾收集的工作移动到别的时间点执行,但在特定的使用情境中,这项功能非常有用。现在gc-disable已在PyPy的Nightly版本中提供。

文章标签: 报价宝 降噪耳机价格 耳机价格 红米手机价格 华为手机价格 小米手机价格 电视机价格 笔记本电脑价格 笔记本价格 汽车价格 笔记本电脑价格 电视机价格 小米手机价格 耳机价格 降噪耳机价格