php yield理解

使用yield之前

function actionIndex($message = 'hello world')
{
    $valuesArray = [];
    // 获取初始内存使用量
    echo '开始'.round(memory_get_usage() / 1024 / 1024, 2) . ' MB' . PHP_EOL;
    for ($i = 1; $i < 800000; $i++) {
        $valuesArray[] = $i;
        // 为了让我们能进行分析,所以我们测量一下内存使用量
        if (($i % 200000) == 0) {
            // 来 MB 为单位获取内存使用量
            echo '中间'.round(memory_get_usage() / 1024 / 1024, 2) . ' MB'. PHP_EOL;
        }
    }
    return $valuesArray;
}
actionIndex();

使用yield之后

function getValues() {
    // 获取内存使用数据
//        echo round(memory_get_usage() / 1024 / 1024, 2) . ' MB' . PHP_EOL;
    file_put_contents("log-memory.txt", '开始'.print_r(round(memory_get_usage() / 1024 / 1024, 2) . ' MB',1).PHP_EOL, FILE_APPEND);
    for ($i = 1; $i < 800000; $i++) {
        yield $i;
        // 做性能分析,因此可测量内存使用率
        if (($i % 200000) == 0) {
            // 内存使用以 MB 为单位
            file_put_contents("log-memory.txt", '中间'.print_r(round(memory_get_usage() / 1024 / 1024, 2) . ' MB',1).PHP_EOL, FILE_APPEND);
            //echo round(memory_get_usage() / 1024 / 1024, 2) . ' MB'. PHP_EOL;
        }
    }
}
//测试
function actionTest()
{
    $myValues = getValues(); // 在循环之前都不会有动作
    echo '开始'.round(memory_get_usage() / 1024 / 1024, 2) . ' MB' . PHP_EOL;
    foreach ($myValues as $Key=> $value) {
//        echo $value.PHP_EOL;
        if (($Key % 200000) == 0) {
            // 来 MB 为单位获取内存使用量
            echo '中间' . round(memory_get_usage() / 1024 / 1024, 2) . ' MB' . PHP_EOL;
        }
    } // 开始生成数据
}
actionTest();

 

posted @ 2022-08-31 17:57  程序员小艺  阅读(50)  评论(0)    收藏  举报