जीवन चक्र

प्रक्रिया जीवन चक्र

  • हर प्रक्रिया का एक लंबा जीवन चक्र होता है
  • हर प्रक्रिया स्वतंत्र रूप से चलती है और एक-दूसरे में हस्तक्षेप नहीं करती है
  • हर प्रक्रिया अपने जीवन चक्र में कई अनुरोधों को संसाधित कर सकती है
  • प्रक्रिया stop reload restart कमांड प्राप्त करते ही छोड़ देती है, जिससे इस बार का जीवन चक्र समाप्त होता है

संकेत
हर प्रक्रिया स्वतंत्र और बिना हस्तक्षेप की होती है, इसका मतलब है कि हर प्रक्रिया अपने संसाधनों, चर और वर्ग के उदाहरणों को बनाए रखती है, उदाहरणस्वरूप हर प्रक्रिया का अपना डेटाबेस कनेक्शन होता है, कुछ एकल उदाहरण हर प्रक्रिया में एक बार आरंभ होते हैं, इसलिए कई प्रक्रियाएं कई बार आरंभ कर सकती हैं।

अनुरोध जीवन चक्र

  • हर अनुरोध एक $request वस्तु उत्पन्न करता है
  • $request वस्तु अनुरोध प्रक्रिया समाप्त होने के बाद पुनः प्राप्त की जाती है

नियंत्रक जीवन चक्र

  • हर नियंत्रक हर प्रक्रिया में केवल एक बार उदाहरणित होता है, कई प्रक्रियाएं कई बार उदाहरणित करती हैं (नियंत्रक पुनः उपयोग को छोड़कर, देखें नियंत्रक जीवन चक्र)
  • नियंत्रक का उदाहरण वर्तमान प्रक्रिया के भीतर कई अनुरोधों द्वारा साझा किया जाएगा (नियंत्रक पुनः उपयोग को छोड़कर)
  • नियंत्रक का जीवन चक्र प्रक्रिया के समाप्त होते ही समाप्त होता है (नियंत्रक पुनः उपयोग को छोड़कर)

चर जीवन चक्र के बारे में

webman PHP पर आधारित है, इसलिए यह पूरी तरह से PHP के चर पुनः प्राप्ति तंत्र का पालन करता है। व्यावसायिक तर्क में उत्पन्न अस्थायी चर, जैसे कि new कुंजीशब्द से बनाए गए वर्ग के उदाहरण, फ़ंक्शन या तरीके के समाप्त होते ही स्वतः पुनः प्राप्त होते हैं, इसे मैन्युअल unset के जरिए मुक्त करने की आवश्यकता नहीं होती है। यानी webman के विकास का अनुभव पारंपरिक ढांचे के विकास के अनुभव के समान है। उदाहरण के लिए, नीचे दिए गए उदाहरण में $foo उदाहरण index तरीके के निष्पादन के साथ ही स्वतः मुक्त हो जाएगा:

<?php

namespace app\controller;

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

class IndexController
{
    public function index(Request $request)
    {
        $foo = new Foo(); // यहाँ मान लें कि एक Foo वर्ग है
        return response($foo->sayHello());
    }
}

यदि आप चाहते हैं कि किसी वर्ग का उदाहरण पुनः उपयोग किया जाए, तो आप इसे वर्ग की स्थिर संपत्ति में या लंबे जीवन चक्र वस्तु (जैसे नियंत्रक) की संपत्ति में संग्रहीत कर सकते हैं, या Container कंटेनर की get विधि का उपयोग करके वर्ग के उदाहरण को आरंभ कर सकते हैं, जैसे:

<?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() विधि का उपयोग वर्ग के उदाहरण को बनाने और संग्रहीत करने के लिए किया जाता है, अगली बार जब उसी पैरामीटर के साथ इसे फिर से बुलाया जाता है, तो यह पहले से बनाए गए वर्ग के उदाहरण को लौटाएगा।

ध्यान दें
Container::get() केवल बिना निर्मात्री पैरामीटर वाले उदाहरणों को आरंभ कर सकता है। Container::make() निर्मात्री फ़ंक्शन के पैरामीटर वाले उदाहरणों को बना सकता है, लेकिन Container::get() से भिन्न, Container::make() उदाहरण को पुनः उपयोग नहीं करेगा, जिसका अर्थ है कि भले ही समान पैरामीटर के साथ, Container::make() हमेशा एक नया उदाहरण लौटाएगा।

मेमोरी लीक के बारे में

अधिकांश स्थितियों में, हमारा व्यावसायिक कोड मेमोरी लीक नहीं करता (बहुत ही कम उपयोगकर्ताओं ने मेमोरी लीक होने की सूचना दी है), हमें सिर्फ यह सुनिश्चित करना है कि लंबे जीवन चक्र के अनुरूप डेटा अनियंत्रित रूप से न बढ़े। कृपया निम्नलिखित कोड पर ध्यान दें:

<?php
namespace app\controller;

use support\Request;

class FooController
{
    // सूची संपत्ति
    public $data = [];

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

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

नियंत्रक डिफ़ॉल्ट रूप से लंबे जीवन चक्र का होता है (नियंत्रक पुनः उपयोग को छोड़कर), इसी प्रकार नियंत्रक की $data सूची की संपत्ति भी लंबे जीवन चक्र की होती है, जब foo/index अनुरोध लगातार बढ़ते रहते हैं, तो $data सूची तत्वों की संख्या बढ़ने लगती है जिससे मेमोरी लीक हो सकता है।

अधिक संबंधित जानकारी के लिए कृपया मेमोरी लीक देखें।