Perl性能优化之Memoize的实现原理

Posted Tcler

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Perl性能优化之Memoize的实现原理相关的知识,希望对你有一定的参考价值。

Perl程序可以通过Memoize模块对函数调用进行缓存,从而提升程序性能。

Memoize的基本用法如下

use Memoize; memoize('slow_function'); slow_function(arguments);

当memoize过的函数被调用时,如果参数相同,那么只有第一次调用时会进行真正的函数调用。 其后的相同参数的调用,结果都将从内部缓存中直接返回。


memoize在Perl里面的实现原理

根据Memoize的用法,关键是需要对原本的函数进行一层包装(wrapper)。

下面的代码可以体现基本的实现原理。

关键步骤是3点:

  1. 通过*{$name}{CODE}获得原函数的引用

  2. 创建匿名函数$wrapper = sub {...},并实现对原函数的引用

  3. 通过*{$name}=$wrapper将原函数的名称映射到上面的匿名函数

神奇的预先声明

比较“神奇”的一点是,memozie允许在原函数被定义之前就先被声明为memoize

而后面的函数定义并不会改变真正被调用的是wrapper函数这一设定。

这一特点使得可以在不修改函数调用代码的情况下启用或停用相应函数的memoize


测试代码和结果

用下面的代码进行测试

Perl性能优化之Memoize的实现原理

Perl性能优化之Memoize的实现原理

输出结果为

输出结果中的memoize_call表明被调用的是wrapper函数。

在此基础上,实现结果缓存就不再是难事。


Tips

这个模块的名字叫做memoize而不是memorize




欢迎关注 Tcler : 从程序看世界,程序它会说话。


长按二维码识别关注 Tcler


以上是关于Perl性能优化之Memoize的实现原理的主要内容,如果未能解决你的问题,请参考以下文章

(原创)[C#] GDI+ 之鼠标交互:原理示例一步步深入性能优化

前端面试题之性能优化篇

C语言实现九大排序算法(建议收藏!)

C语言实现九大排序算法(建议收藏!)

web性能优化之浏览器网页渲染原理

前端性能优化之 Composite