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点:
通过
*{$name}{CODE}
获得原函数的引用创建匿名函数
$wrapper = sub {...}
,并实现对原函数的引用通过
*{$name}=$wrapper
将原函数的名称映射到上面的匿名函数
神奇的预先声明
比较“神奇”的一点是,memozie允许在原函数被定义之前就先被声明为memoize
。
而后面的函数定义并不会改变真正被调用的是wrapper函数这一设定。
这一特点使得可以在不修改函数调用代码的情况下启用或停用相应函数的memoize
。
测试代码和结果
用下面的代码进行测试
输出结果为
输出结果中的memoize_call
表明被调用的是wrapper函数。
在此基础上,实现结果缓存就不再是难事。
Tips
这个模块的名字叫做memoize
而不是memorize
。
欢迎关注 Tcler : 从程序看世界,程序它会说话。
长按二维码识别关注 Tcler
以上是关于Perl性能优化之Memoize的实现原理的主要内容,如果未能解决你的问题,请参考以下文章