国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

生命周期

進(jìn)程生命周期

  • 每個(gè)進(jìn)程都有很長的生命周期
  • 每個(gè)進(jìn)程是獨(dú)立運(yùn)行的互不干擾的
  • 每個(gè)進(jìn)程在其生命周期內(nèi)可以處理多個(gè)請(qǐng)求
  • 進(jìn)程在收到stop reload restart命令時(shí)會(huì)執(zhí)行退出,結(jié)束本次生命周期

提示
每個(gè)進(jìn)程都是獨(dú)立互不干擾的,這意味著每個(gè)進(jìn)程都維護(hù)著自己的資源、變量和類實(shí)例等,表現(xiàn)在每個(gè)進(jìn)程都有自己的數(shù)據(jù)庫連接,一些單例在每個(gè)進(jìn)程始化一次,那么多個(gè)進(jìn)程就會(huì)初始化多次。

請(qǐng)求生命周期

  • 每個(gè)請(qǐng)求會(huì)產(chǎn)生一個(gè)$request對(duì)象
  • $request對(duì)象在請(qǐng)求處理完畢后會(huì)被回收

控制器生命周期

  • 每個(gè)控制器每個(gè)進(jìn)程只會(huì)實(shí)例化一次,多個(gè)進(jìn)程實(shí)例化多次(關(guān)閉控制器復(fù)用除外,參見控制器生命周期)
  • 控制器實(shí)例會(huì)被當(dāng)前進(jìn)程內(nèi)多個(gè)請(qǐng)求共享(關(guān)閉控制器復(fù)用除外)
  • 控制器生命周期在進(jìn)程退出后結(jié)束(關(guān)閉控制器復(fù)用除外)

關(guān)于變量生命周期

webman是基于php開發(fā)的,所以它完全遵循php的變量回收機(jī)制。業(yè)務(wù)邏輯里產(chǎn)生的臨時(shí)變量包括new關(guān)鍵字創(chuàng)建的類的實(shí)例,在函數(shù)或者方法結(jié)束后自動(dòng)回收,無需手動(dòng)unset釋放。也就是說webman開發(fā)與傳統(tǒng)框架開發(fā)體驗(yàn)基本一致。例如下面例子中$foo實(shí)例會(huì)隨著index方法執(zhí)行完畢而自動(dòng)釋放:

<?php

namespace app\controller;

use app\service\Foo;
use support\Request;

class IndexController
{
    public function index(Request $request)
    {
        $foo = new Foo(); // 這里假設(shè)有一個(gè)Foo類
        return response($foo->sayHello());
    }
}

如果你想某個(gè)類的實(shí)例被復(fù)用,則可以將類保存到類的靜態(tài)屬性中或長生命周期對(duì)象(如控制器)的屬性中,也可以使用Container容器的get方法來初始化類的實(shí)例,例如:

<?php

namespace app\controller;

use app\service\Foo;
use support\Container;
use support\Request;

class IndexController
{
    public function index(Request $request)
    {
        $foo = Container::get(Foo::class);
        return response($foo->sayHello());
    }
}

Container::get()方法用于創(chuàng)建并保存類的實(shí)例,下次再次以同樣的參數(shù)再次調(diào)用時(shí)將返回之前創(chuàng)建的類實(shí)例。

注意
Container::get()只能初始化沒有構(gòu)造參數(shù)的實(shí)例。Container::make()可以創(chuàng)建帶構(gòu)造函數(shù)參數(shù)的實(shí)例,但是與Container::get()不同的是,Container::make()并不會(huì)復(fù)用實(shí)例,也就是說即使以同樣的參數(shù)Container::make()始終返回一個(gè)新的實(shí)例。

關(guān)于內(nèi)存泄漏

絕大部分情況下,我們的業(yè)務(wù)代碼并不會(huì)發(fā)生內(nèi)存泄漏(極少有用戶反饋發(fā)生內(nèi)存泄漏),我們只要稍微注意下長生命周期的數(shù)組數(shù)據(jù)不要無限擴(kuò)張即可。請(qǐng)看以下代碼:

<?php
namespace app\controller;

use support\Request;

class FooController
{
    // 數(shù)組屬性
    public $data = [];

    public function index(Request $request)
    {
        $this->data[] = time();
        return response('hello index');
    }

    public function hello(Request $request)
    {
        return response('hello webman');
    }
}

控制器默認(rèn)是長生命周期的(關(guān)閉控制器復(fù)用除外),同樣的控制器的$data數(shù)組屬性也是長周期的,隨著foo/index請(qǐng)求不斷增加,$data數(shù)組元素越來越多導(dǎo)致內(nèi)存泄漏。

更多相關(guān)信息請(qǐng)參考 內(nèi)存泄漏

編輯于2025-02-06 22:08:54 完善本頁 +發(fā)起討論
贊助商