জীবনচক্র

প্রক্রিয়া জীবনচক্র

  • প্রতিটি প্রক্রিয়ার একটি দীর্ঘ জীবনচক্র থাকে
  • প্রতিটি প্রক্রিয়া স্বতন্ত্রভাবে পরিচালিত হয় এবং একে অপরকে বিরক্ত করে না
  • প্রতিটি প্রক্রিয়া তার জীবনচক্রের মধ্যে একাধিক অনুরোধ পরিচালনা করতে পারে
  • প্রক্রিয়া যখন 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());
    }
}

আপনি যদি চান যে কোনও ক্লাসের ইনস্ট্যান্স পুনঃব্যবহার করা হোক, তাহলে আপনি ক্লাসটিকে ক্লাসের স্ট্যাটিক প্রপার্টি বা দীর্ঘ জীবন周期ের অবজেক্ট (যেমন নিয়ামক) এর প্রপার্টিতে সংরক্ষণ করতে পারেন, অথবা কন্টেনার কনটেইনারের 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');
    }
}

নিয়ামক স্ব default তর দীর্ঘ জীবনচক্রের (নিয়ামক পুনঃব্যবহারের ব্যতিক্রম), একইভাবে নিয়ামকের $data অ্যারে প্রপার্টিও দীর্ঘ জীবনের, foo/index অনুরোধগুলির সাথে বাড়ানোর সাথে সাথে, $data অ্যারে উপাদান সংখ্যা বাড়তে থাকে যা মেমরি স্রাবের কারণ হয়।

আরও সম্পর্কিত তথ্যের জন্য দয়া করে দেখুন মেমরি স্রাব