কীভাবে একজন পিএইচপি অ্যাপ্লিকেশনগুলিতে মাল্টি থ্রেডিং ব্যবহার করতে পারে


414

পিএইচপি-তে কোনও মাল্টি-থ্রেড মডেল বাস্তবায়নের বাস্তবসম্মত উপায় আছে কি না এটি কেবল অনুকরণীয়। কিছু সময় আগে প্রস্তাব দেওয়া হয়েছিল যে আপনি অপারেটিং সিস্টেমটিকে পিএইচপি এক্সিকিউটেবলের আরেকটি উদাহরণ লোড করতে এবং অন্যান্য যুগপত প্রক্রিয়াগুলি পরিচালনা করতে বাধ্য করতে পারেন।

এটির সাথে সমস্যাটি হ'ল পিএইচপি কোডটি যখন পিএইচপি উদাহরণটি কার্যকর করে শেষ করে তখন মেমরিতে থেকে যায় কারণ পিএইচপি থেকে এটি মারার কোনও উপায় নেই। সুতরাং আপনি যদি কয়েকটি থ্রেড সিমুলেট করে থাকেন তবে কী ঘটতে চলেছে তা আপনি কল্পনা করতে পারেন। সুতরাং আমি এখনও পিএইচপি এর মধ্যে থেকে কার্যকরভাবে মাল্টি-থ্রেডিং করা বা সিমুলেট করার উপায় খুঁজছি for কোন ধারনা?


1
: এখানে আমার প্রশ্ন ও উত্তর দেখুন stackoverflow.com/questions/2101640/...
powtac



আগ্রহের কারণ হতে পারে: pthreads.org
গিব্বোক

এখন 2020, এটা মনে হয় "সমান্তরাল" php.net/manual/en/intro.parallel.php কি আমরা "pthreads" এর পরিবর্তে চাই: stackoverflow.com/a/56451969/470749
রায়ান

উত্তর:


431

মাল্টি-থ্রেডিং পিএইচপি-তে সম্ভব

হ্যাঁ আপনি পিএইচপিতে pthreads সহ মাল্টি-থ্রেডিং করতে পারেন

থেকে পিএইচপি ডকুমেন্টেশন :

pthreads হ'ল একটি অবজেক্ট-ওরিয়েন্টেটেড API যা পিএইচপি-তে মাল্টি-থ্রেডিংয়ের জন্য প্রয়োজনীয় সমস্ত সরঞ্জাম সরবরাহ করে। পিএইচপি অ্যাপ্লিকেশনগুলি থ্রেডস, ওয়ার্কার্স এবং থ্রেডেড অবজেক্টগুলির সাথে তৈরি করতে, পড়তে, লিখতে, চালিত করতে এবং সংহত করতে পারে।

সতর্কতা : pthreads এক্সটেনশনটি ওয়েব সার্ভার পরিবেশে ব্যবহার করা যাবে না। পিএইচপি-তে থ্রেডিং কেবলমাত্র সিএলআই-ভিত্তিক অ্যাপ্লিকেশনগুলিতেই থাকা উচিত।

সাধারণ পরীক্ষা

#!/usr/bin/php
<?php
class AsyncOperation extends Thread {

    public function __construct($arg) {
        $this->arg = $arg;
    }

    public function run() {
        if ($this->arg) {
            $sleep = mt_rand(1, 10);
            printf('%s: %s  -start -sleeps %d' . "\n", date("g:i:sa"), $this->arg, $sleep);
            sleep($sleep);
            printf('%s: %s  -finish' . "\n", date("g:i:sa"), $this->arg);
        }
    }
}

// Create a array
$stack = array();

//Initiate Multiple Thread
foreach ( range("A", "D") as $i ) {
    $stack[] = new AsyncOperation($i);
}

// Start The Threads
foreach ( $stack as $t ) {
    $t->start();
}

?>

প্রথম রান

12:00:06pm:     A  -start -sleeps 5
12:00:06pm:     B  -start -sleeps 3
12:00:06pm:     C  -start -sleeps 10
12:00:06pm:     D  -start -sleeps 2
12:00:08pm:     D  -finish
12:00:09pm:     B  -finish
12:00:11pm:     A  -finish
12:00:16pm:     C  -finish

দ্বিতীয় রান

12:01:36pm:     A  -start -sleeps 6
12:01:36pm:     B  -start -sleeps 1
12:01:36pm:     C  -start -sleeps 2
12:01:36pm:     D  -start -sleeps 1
12:01:37pm:     B  -finish
12:01:37pm:     D  -finish
12:01:38pm:     C  -finish
12:01:42pm:     A  -finish

বাস্তব বিশ্বের উদাহরণ

error_reporting(E_ALL);
class AsyncWebRequest extends Thread {
    public $url;
    public $data;

    public function __construct($url) {
        $this->url = $url;
    }

    public function run() {
        if (($url = $this->url)) {
            /*
             * If a large amount of data is being requested, you might want to
             * fsockopen and read using usleep in between reads
             */
            $this->data = file_get_contents($url);
        } else
            printf("Thread #%lu was not provided a URL\n", $this->getThreadId());
    }
}

$t = microtime(true);
$g = new AsyncWebRequest(sprintf("http://www.google.com/?q=%s", rand() * 10));
/* starting synchronization */
if ($g->start()) {
    printf("Request took %f seconds to start ", microtime(true) - $t);
    while ( $g->isRunning() ) {
        echo ".";
        usleep(100);
    }
    if ($g->join()) {
        printf(" and %f seconds to finish receiving %d bytes\n", microtime(true) - $t, strlen($g->data));
    } else
        printf(" and %f seconds to finish, request failed\n", microtime(true) - $t);
}

3
@ বাবা, আমি এক্সএএমপি সার্ভারে পাইথ্রেডগুলি কনফিগার করতে ও ইনস্টল করতে পারছি না। আপনি কি আমাকে সাহায্য করতে পারেন?
ইরফান

4
উইন্ডোজের বাইনারিটি এখানে ডাউনলোড করুন উইন্ডোজ.এফপিএন
বাবা

17
এটি দুর্দান্ত, আমি বহু বছর ধরে পিএইচপি স্পর্শ করি নি এবং এখন এটি মাল্টিথ্রেডিংয়ের ক্ষমতা পেয়েছে!
ক্রুজার

1
সুন্দর এবং সহজ! শুধু এফওয়াইআই, আমি অ্যাজুরে ক্লাউড উইন সার্ভারে একটি অ্যাপ স্থাপন করছি এবং কেবলমাত্র 1 টি প্রাথমিক কনফিগারেশনটি নির্বাচিত হলে মাল্টি-থ্রেডিং পাওয়া যাবে না যতক্ষণ না আরও কোর যুক্ত করা হয়।
মিলান

3
দয়া করে সাবধান হন: পাইথ্রেডস এক্সটেনশনের লেখক জো ওয়াটকিন্স নতুন সমান্তরাল এক্সটেনশনের পক্ষে এই উন্নয়ন বন্ধ করেছেন: গিথুব.com
আন্তন বেলোনোভিচ

42

আপনি পপেন ব্যবহার করেন না কেন ?

for ($i=0; $i<10; $i++) {
    // open ten processes
    for ($j=0; $j<10; $j++) {
        $pipe[$j] = popen('script2.php', 'w');
    }

    // wait for them to finish
    for ($j=0; $j<10; ++$j) {
        pclose($pipe[$j]);
    }
}

4
আমি উপরের সমাধানটি ব্যবহার করছি, এবং সূক্ষ্মভাবে কাজ করি, আমি মনে করি পিএইচপি ব্যবহার করে সমান্তরাল প্রক্রিয়াটি করা সবচেয়ে সহজ উপায়।
গডফাদার 14

7
@ ই-ইনফো 128 বলেছে, এই প্রয়োগকরণটি প্রক্রিয়াটিকে জোরদার করে, যার অর্থ এটি একটি ভিন্ন প্রক্রিয়াতে চলছে এবং প্রক্রিয়া সংস্থানগুলি ভাগ করে না। বলা হচ্ছে, যদি হাতের কাজটি যদি সংস্থানগুলি ভাগ করার প্রয়োজন না হয়, তবে এটি এখনও কাজ করবে এবং এটি সমান্তরালে চলবে।
রাফি

1
সেশন ভেরিয়েবলগুলি ব্যবহার না করে আপনি কীভাবে ভেরিয়েবলগুলি পপনে পাস করবেন?
atwellpub

@atwellpub কোনও উপায় নেই, এগুলি পৃথক প্রক্রিয়া যা কোনও সংস্থান ভাগ করে নিচ্ছে। এমনকি সেশনগুলি বিশ্রী আইপিসি প্রক্রিয়া হবে
চোলঠি পল টিটিওপিক

1
তাদের কাছে ডেটা পাস করার জন্য, আপনি আর্গুমেন্ট এবং রেডিস সার্ভারটিও ব্যবহার করতে পারেন।
আমির ফো

21

স্ট্রেড পিএইচপিতে থ্রেডিং উপলভ্য নয় তবে এইচটিটিপি অনুরোধগুলি অ্যাসিঙ্ক্রোনাস কল হিসাবে ব্যবহার করে সমবর্তী প্রোগ্রামিং সম্ভব।

কার্লের টাইমআউটটি 1 এ সেট করা এবং আপনি একে অপরের সাথে যুক্ত হতে চান এমন প্রক্রিয়াগুলির জন্য একই সেশন_আইড ব্যবহার করে, আপনি নীচের আমার উদাহরণ হিসাবে সেশন ভেরিয়েবলের সাথে যোগাযোগ করতে পারেন। এই পদ্ধতির সাহায্যে আপনি এমনকি আপনার ব্রাউজারটি বন্ধ করতে পারেন এবং সার্ভারে সমবর্তী প্রক্রিয়া এখনও বিদ্যমান।

এই মত সঠিক সেশন আইডি যাচাই করতে ভুলবেন না:

http: //localhost/test/verifysession.php? সেশনিড = [ সঠিক আইডি]

startprocess.php

$request = "http://localhost/test/process1.php?sessionid=".$_REQUEST["PHPSESSID"];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $request);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
curl_exec($ch);
curl_close($ch);
echo $_REQUEST["PHPSESSID"];

process1.php

set_time_limit(0);

if ($_REQUEST["sessionid"])
   session_id($_REQUEST["sessionid"]);

function checkclose()
{
   global $_SESSION;
   if ($_SESSION["closesession"])
   {
       unset($_SESSION["closesession"]);
       die();
   }
}

while(!$close)
{
   session_start();
   $_SESSION["test"] = rand();
   checkclose();
   session_write_close();
   sleep(5);
}

verifysession.php

if ($_REQUEST["sessionid"])
    session_id($_REQUEST["sessionid"]);

session_start();
var_dump($_SESSION);

closeprocess.php

if ($_REQUEST["sessionid"])
    session_id($_REQUEST["sessionid"]);

session_start();
$_SESSION["closesession"] = true;
var_dump($_SESSION);

4
গতবার আমি পরীক্ষা করেছিলাম (কয়েক বছর আগে) পিএইচপি একসাথে দুটি প্রক্রিয়া দ্বারা ফাইল ভিত্তিক সেশন স্টোরেজ অ্যাক্সেস করতে দেয়নি। এটি ফাইলটি লক করে এবং দ্বিতীয় প্রক্রিয়াটি প্রথম স্ক্রিপ্টটি থামার অপেক্ষায় সেখানে বসে থাকতে হয়। আমি ওয়েবসিভার পরিবেশ সম্পর্কে কথা বলছি, সি এল এলির কথা নয়।
আলেক্সি টেনিটস্কি

5
set_time_limit(0);বাবা! কখনই না, কখনই এটি করবেন না।
কাফোসো

@ কাফসো কাফসো কেন না? ওয়েল, আমি ওয়েব স্ক্রিপ্ট প্রসেসর হিসাবে পিএইচপি এর জন্য সম্মত, কিন্তু কেন সি এল এল এ নয়? যদি কিছু ভুল হয়ে যায় তবে
সিটিএলকে সিটিআরএল

14

আপনি থ্রেড করতে পারবেন না, আপনার পিএইচপি মধ্যে কিছু ডিগ্রী প্রক্রিয়া নিয়ন্ত্রণ আছে। দুটি কার্যকারিতা সেট যা এখানে দরকারী:

প্রক্রিয়া নিয়ন্ত্রণ ফাংশন http://www.php.net/manual/en/ref.pcntl.php

পসিক্স ফাংশন http://www.php.net/manual/en/ref.posix.php

আপনি pcntl_fork দিয়ে আপনার প্রক্রিয়াটি কাঁটাতে পারেন - সন্তানের পিআইডি ফিরিয়ে দিতে। তারপরে আপনি সেই পিআইডিটিকে অস্বীকার করার জন্য পোস্টিক্স_কিল ব্যবহার করতে পারেন।

এটি বলেছে, আপনি যদি কোনও পিতামাতার প্রক্রিয়াটিকে হত্যা করেন তবে শিশু প্রসেসটিতে এটি মারা যাওয়ার কথা বলে একটি সংকেত প্রেরণ করা উচিত। যদি পিএইচপি নিজেই এটির স্বীকৃতি না দেয় তবে আপনি এটি পরিচালনা করতে কোনও ফাংশন নিবন্ধন করতে পারেন এবং pcntl_signal ব্যবহার করে একটি পরিষ্কার প্রস্থান করতে পারেন।


1
এই উত্তরটি এখন খুব পুরানো (যা 11 বছরের পুরানো জেনে খুব ন্যায্য)। নীচে pthreads দেখুন।
ম্যাকিয়েজ পাপ্রোকি

@ ম্যাসিজেপপ্রোকি পিথ্রেড এখন সমান্তরাল ব্যবহারের পরিবর্তে ph.৪ পৃষ্ঠার বন্ধ করা হয়েছে
এয়ারি

10

থ্রেড ব্যবহার করা সম্ভব হয়েছে পাইথ্রেডস পিইসিএল এক্সটেনশন দ্বারা

http://www.php.net/manual/en/book.pthreads.php


পি-থ্রেড এখন সমান্তরাল ব্যবহারের পরিবর্তে 7 নম্বরের থেকে বন্ধ করা হয়েছে
এয়ারি

10

আমি জানি এটি একটি পুরানো প্রশ্ন তবে লোকেরা অনুসন্ধানের জন্য সি তে একটি পিইসিএল বর্ধিত লেখা রয়েছে যা পিএইচপি মাল্টি-থ্রেডিংয়ের ক্ষমতা দেয় এখন এটি এখানে রয়েছে https://github.com/krakjoe/pthreads


পিথ্রেড এখন পিএইচপি 7.4 এর থেকে বন্ধ করে পরিবর্তে সমান্তরাল ব্যবহার করুন
এয়ারি

5

আপনি কমান্ড লাইন স্ক্রিপ্ট চালানোর জন্য এক্সিকিউটিভ () ব্যবহার করতে পারেন (যেমন কমান্ড লাইন পিএইচপি), এবং যদি আপনি কোনও ফাইলে আউটপুটটি পাইপ করেন তবে আপনার স্ক্রিপ্ট কমান্ডটি শেষ হওয়ার অপেক্ষায় থাকবে না।

আমি পিএইচপি সিএলআই সিনট্যাক্সটি বেশ মনে করতে পারি না তবে আপনি এর মতো কিছু চাইবেন:

exec("/path/to/php -f '/path/to/file.php' | '/path/to/output.txt'");

আমি মনে করি সুরক্ষার কারণে বেশ কয়েকটি ভাগ করা হোস্টিং সার্ভারগুলি ডিফল্টরূপে এক্সিকিউট () অক্ষম করেছে, তবে এটি চেষ্টা করার মতো হতে পারে।


4

আপনি থ্রেডিং অনুকরণ করতে পারে। পিএইচপি পপেন (বা প্রোক_পেন) এর মাধ্যমে পটভূমি প্রক্রিয়া চালাতে পারে। এই প্রক্রিয়াগুলি স্টিডিন এবং স্টাডাউটের মাধ্যমে যোগাযোগ করা যেতে পারে। অবশ্যই এই প্রক্রিয়াগুলি নিজেরাই পিএইচপি প্রোগ্রাম হতে পারে। এটি সম্ভবত আপনি পাবেন হিসাবে কাছাকাছি।


3

আপনি যা করার চেষ্টা করছেন তার উপর নির্ভর করে আপনি এটি অর্জন করতে curl_m মাল্টিও ব্যবহার করতে পারেন।


3

আমি জানি এটি বেশ পুরানো, তবে আপনি দেখতে পারেন http://phpthreadlib.sourceforge.net/

এটি দ্বি-দিকীয় আন্তঃ-থ্রেড যোগাযোগকে সমর্থন করে এবং শিশুদের থ্রেডগুলি (অনাথদের প্রতিরোধ করা) হত্যার জন্য অন্তর্নির্মিত সুরক্ষা দিয়েছে।


3

আপনার বিকল্প থাকতে পারে:

  1. multi_curl
  2. একই জন্য সিস্টেম কমান্ড ব্যবহার করতে পারেন
  3. আদর্শ দৃশ্যটি হ'ল সি ভাষায় একটি থ্রেডিং ফাংশন তৈরি করুন এবং পিএইচপি-তে সংকলন / কনফিগার করুন। এখন সেই ফাংশনটি পিএইচপি এর ফাংশন হবে।

3

থ্রেড বর্গ যেহেতু PECL pthreads ≥ 2.0.0 পাওয়া যায়।


1
আমি কি এইচটিটিপি দিয়ে থ্রেড চালাতে পারি? সরল: yourname.com/thread.php?
আমার নাম

পিথ্রেড এখন পিএইচপি 7.4 এর পরিবর্তে সমান্তরাল ব্যবহার বন্ধ রয়েছে
এয়ারি


2

pcntl_forkএটি যদি নিরাপদ মোড চালু থাকে তবে কোনও ওয়েব সার্ভার পরিবেশে কাজ করবে না । এই ক্ষেত্রে, এটি কেবল পিএইচপি এর সিএলআই সংস্করণে কাজ করবে।


1

আপনি যদি লিনাক্স সার্ভার ব্যবহার করেন তবে আপনি এটি ব্যবহার করতে পারেন

exec("nohup $php_path path/script.php > /dev/null 2>/dev/null &")

আপনার যদি দরকার হয় কিছু আরগস পাস করুন

exec("nohup $php_path path/script.php $args > /dev/null 2>/dev/null &")

স্ক্রিপ্ট.এফপি

$args = $argv[1];

অথবা সিমফনি https://symfony.com/doc/current/components/process.html ব্যবহার করুন

$process = Process::fromShellCommandline("php ".base_path('script.php'));
$process->setTimeout(0);     
$process->disableOutput();     
$process->start();

-1

আমার বর্তমান মন্তব্য লেখার হিসাবে, আমি পিএইচপি থ্রেড সম্পর্কে জানি না। আমি নিজেই এখানে উত্তরটি সন্ধান করতে এসেছি, তবে একটি কর্মসূচি হ'ল পিএইচপি প্রোগ্রাম যা ওয়েব সার্ভারের কাছ থেকে অনুরোধ পেয়েছে এটি সম্পূর্ণ উত্তর সূত্রটি একটি কনসোল অ্যাপ্লিকেশনকে সরবরাহ করে যা এর আউটপুট সংরক্ষণ করে, অনুরোধের উত্তরটি একটি বাইনারি ফাইলকে দেয় এবং পিএইচপি প্রোগ্রাম যা কনসোল অ্যাপ্লিকেশন চালু করেছে সেই বাইনারি ফাইল বাই বাই বাই প্রাপ্ত প্রাপ্ত অনুরোধের উত্তর হিসাবে ফিরে আসে। কনসোল অ্যাপ্লিকেশনটি সার্ভারে চলমান যে কোনও প্রোগ্রামিং ভাষায় লিখিত থাকতে পারে, ওপেনএমপি ব্যবহার করে এমন সি ++ প্রোগ্রাম সহ উপযুক্ত থ্রেডিং সমর্থন রয়েছে এমনগুলি সহ including

একটি অবিশ্বাস্য, নোংরা, কৌশলটি কনসোল অ্যাপ্লিকেশন সম্পাদন করার জন্য পিএইচপি ব্যবহার করা হয়, "অকেম",

uname -a

এবং সার্ভার সফ্টওয়্যারটির সঠিক সংস্করণটি জানতে এই কনসোল কমান্ডের আউটপুটটি এইচটিএমএল আউটপুটে মুদ্রণ করুন। তারপরে সফ্টওয়্যারটির ঠিক একই সংস্করণটিকে ভার্চুয়ালবক্স উদাহরণে ইনস্টল করুন, যা কিছু অন্তত স্ব-অন্তর্ভুক্ত, পছন্দসই স্থির, বাইনারিগুলি যা চান তা সংকলন / একত্র করুন এবং তারপরে সেগুলি সার্ভারে আপলোড করুন। সেই থেকে পিএইচপি অ্যাপ্লিকেশন সেই বাইনারিগুলি কনসোল অ্যাপ্লিকেশনটির ভূমিকাতে ব্যবহার করতে পারে যার যথাযথ মাল্টি-থ্রেডিং রয়েছে। সার্ভার প্রশাসক যখন সার্ভারে প্রয়োজনীয় সমস্ত প্রোগ্রামিং ভাষার প্রয়োগগুলি ইনস্টল করেন না তখন এটি একটি নোংরা, অবিশ্বস্ত, পরিস্থিতিটির মতো কাজ করে না। নজর রাখার বিষয়টি হ'ল পিএইচপি অ্যাপ্লিকেশন কনসোল অ্যাপ্লিকেশন (গুলি) সমাপ্ত / প্রস্থান / get_killed প্রাপ্তির প্রতিটি অনুরোধে।

হোস্টিং পরিষেবা প্রশাসকরা এই জাতীয় সার্ভার ব্যবহারের ধরণ সম্পর্কে কী ভাবেন, আমার ধারণা এটি সংস্কৃতিতে ফোটে। উত্তর ইউরোপে পরিষেবা সরবরাহকারীর বিজ্ঞাপন যা বিতরণ করা হয়েছিল এবং যদি কনসোল কমান্ড কার্যকর করার অনুমতি দেওয়া হয় এবং নন-ম্যালওয়্যার ফাইলগুলি আপলোড করার অনুমতি দেওয়া হয়েছিল এবং পরিষেবা সরবরাহকারীর কয়েক মিনিট বা 30 সেকেন্ড পরেও কোনও সার্ভার প্রক্রিয়া মেরে ফেলার অধিকার রয়েছে , তারপরে হোস্টিং পরিষেবা প্রশাসকদের যথাযথ অভিযোগ গঠনের জন্য কোনও যুক্তির অভাব রয়েছে। মার্কিন যুক্তরাষ্ট্র এবং পশ্চিম ইউরোপে পরিস্থিতি / সংস্কৃতি খুব আলাদা এবং আমি বিশ্বাস করি যে মার্কিন যুক্তরাষ্ট্র এবং / অথবা পশ্চিম ইউরোপে হোস্টিং পরিষেবা সরবরাহকারী উপরোক্ত বর্ণিত কৌশলটি ব্যবহার করে হোস্টিং পরিষেবা ক্লায়েন্টদের পরিবেশন করতে অস্বীকার করবে তার একটি দুর্দান্ত সম্ভাবনা রয়েছে। এটি কেবল আমার অনুমান, আমেরিকার সাথে আমার ব্যক্তিগত অভিজ্ঞতা দেওয়া হোস্টিং পরিষেবাদি এবং পশ্চিমা ইউরোপীয় হোস্টিং পরিষেবাদি সম্পর্কে অন্যের কাছ থেকে যা শুনেছি তা দেওয়া। আমার বর্তমান মন্তব্যের লেখার হিসাবে (2018_09_01) আমি দক্ষিণ-ইউরোপীয় হোস্টিং পরিষেবা সরবরাহকারী, দক্ষিণ-ইউরোপীয় নেটওয়ার্ক প্রশাসকদের সাংস্কৃতিক মানদণ্ড সম্পর্কে কিছুই জানি না।


-3

আমি কিছু মিস করতে পারি তবে এক্সিকিউট উইন্ডোজ এনভায়রনমেন্টে আমার পক্ষে অ্যাসিনক্রোনাস হিসাবে কাজ করেন নি আমি উইন্ডোতে নিম্নলিখিত ব্যবহার করতাম এবং এটি কবজির মতো কাজ করেছিল;)

$script_exec = "c:/php/php.exe c:/path/my_ascyn_script.php";

pclose(popen("start /B ". $script_exec, "r"));

1
পিএইচপি-তে মাল্টিথ্রেডিং হ্যাক করতে আপনার একাধিক পপেন () বিবৃতি খুলতে হবে (পিএইচপি এটি সম্পূর্ণ হওয়ার জন্য অপেক্ষা করবে না)। তারপরে দেড় ডজন বা তার পরেও খোলা হওয়ার পরে আপনি তাদের (পিএইচপি সম্পূর্ণ হওয়ার জন্য pclose () অপেক্ষা করবেন) এর উপর প্যাক্লোজ () কল করুন। আপনার কোডে আপনি প্রতিটি থ্রেড খোলার সাথে সাথেই বন্ধ করে দেন যাতে আপনার কোডটি মাল্টিথ্রেডের মতো আচরণ করবে না।
Kmeixner

-5

মাল্টিথ্রেডিং মানে একসাথে একাধিক টাস্ক বা প্রক্রিয়া সম্পাদন করা, আমরা নিম্নলিখিত কোড ব্যবহার করে পিএইচপিতে এটি অর্জন করতে পারি, যদিও পিএইচপি-তে মাল্টিথ্রেডিং অর্জনের সরাসরি উপায় নেই তবে আমরা নিম্নলিখিত পদ্ধতিতে প্রায় একই ফলাফল অর্জন করতে পারি।

chdir(dirname(__FILE__));  //if you want to run this file as cron job
 for ($i = 0; $i < 2; $i += 1){
 exec("php test_1.php $i > test.txt &");
 //this will execute test_1.php and will leave this process executing in the background and will go         

 //to next iteration of the loop immediately without waiting the completion of the script in the   

 //test_1.php , $i  is passed as argument .

}

Test_1.php

$conn=mysql_connect($host,$user,$pass);
$db=mysql_select_db($db);
$i = $argv[1];  //this is the argument passed from index.php file
for($j = 0;$j<5000; $j ++)
{
mysql_query("insert  into  test   set

                id='$i',

                comment='test',

                datetime=NOW() ");

}

এটি একযোগে দুইবার test_1.php সম্পাদন করবে এবং উভয় প্রক্রিয়া একই সাথে পটভূমিতে চলবে, সুতরাং এইভাবে আপনি পিএইচপি-তে মাল্টিথ্রেডিং অর্জন করতে পারবেন।

এই লোকটি পিএইচপিএইচটিতে মাল্টিথ্রেডিংয়ের কাজটি খুব ভাল করেছে


এছাড়াও, এটি মাল্টিথ্রেডিংয়ের সাথে কিছুই করতে পারে না। এটি সমান্তরাল-প্রক্রিয়াজাতকরণ। সম্পূর্ণ আলাদা জিনিস।
ডিজিটাল হিউম্যান

একটি জরুরী, একটি জরুরি হ্যাক হিসাবে আমার মতে, প্রস্তাবিত সমাধানের পিছনে ধারণাটি খুব উপযুক্ত, তবে আমি অনুমান করি যে "সত্যিকারের মাল্টি-থ্রেডিং" কে কী গঠন করে তা নিয়ে বিভিন্ন লোকের শিখা যুদ্ধ হতে পারে, কারণ চুক্তি এবং হার্ডওয়্যার ভিত্তিক পার্থক্য রয়েছে সমান্তরাল প্রক্রিয়াকরণ, এখানে বর্ণিত হিসাবে: youtube.com/watch?v=cN_DpYBzKso
মার্টিন Vahi
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.