• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
pThread - Threading for PHP
#1
pThreads واقعیه Big Grin

[عکس: 0tvn_untitled.png]

کد پی‌اچ‌پی:
<?php

class MyClassName extends Thread
{
    private 
$classId NULL;

    function 
__construct()
    {
        
$this->classId rand(19);
        return;
    }

    function 
run()
    {
        for (
$i $i 10$i ++)
        {
            echo (
"Object: #{$this->classId} - current executing thread UID: " $this->getCurrentThreadId() . PHP_EOL);
            
sleep(25);
            return;
        }
    }
}

const 
THREADS 4;

for (
$i 0$i THREADS$i ++)
{
    
$pool[] = new MyClassName();
}

foreach (
$pool as $worker)
{
    if (!
$worker->isStarted())
    {
        if (!
$worker->start())
        {
            echo 
'Error starting thread.';
            break;
        }
    }
    else
    {
        echo 
'The thread is already started.';
        break;
    }
}

foreach (
$pool as $worker)
{
    if (
$worker->isStarted())
    {
        if (!
$worker->isJoined())
        {
            if (!
$worker->join())
            {
                echo 
'Error joining thread.';
                break;
            }
        }
        else
        {
            echo 
'The thread is already joined.';
            break;
        }
    }
    else
    {
        echo 
'The thread is not started.';
        break;
    }
}

?>

کد:
Object: #5 - current executing thread UID: 1844
Object: #4 - current executing thread UID: 2760
Object: #8 - current executing thread UID: 2928
Object: #4 - current executing thread UID: 1592

https://github.com/krakjoe/pthreads
وبلاگ: Yousha.Blog.ir


 کد کمتر => خطای کمتر => قابل فهمتر => خوانایی بالاتر => نگهداری بهتر

  پاسخ
تشکر شده توسط : scorpion Reza ayoubsys
#2
ممنون
چند تا از کاربرهای زیادشو میگی؟
مثلا توی صف محاسبات یا کران جابها یا هر چیزی که فکرشو میکنی Smile
وبلاگ rezaonline.net/blog
سفارش برنامه نویسی reza.biz
Php , mysql , postgresql , redis , Yii and ... Cool
  پاسخ
تشکر شده توسط : ayoubsys
#3
اگر اصل thread و multi-threading رو درک کنی به همه کاربرهاش پی میبری...

دیدی بعضی برنامه های دسکتاپی که با اینترنت سروکار دارن، بمحض اینکه فعالش میکنی برنامه هنگ میکنه و Not responding میده؟ و برنامه سفید میشه؟
بخاطر اینه که اون برنامه Multi-thread "نیست" و فقط یه thread main داره(بصورت default) و از همون هم داره برای همه کارها، از جمله networking استفاده میکنه! لذا کل برنامه قفل میشه تا زمانی که اون یدونه کار اینترنتی به اتمام برسه و برنامه به حالت نرمالش برگره.


اما چند تا از کاربردهاش:
Socket programming / client-server - مثل سیستم های چت real-time واقعی بهمراه PM و Room حتی
File operations - از اونجایی که عملیات روی فایل بصورت synch انجام میشه، پس طبیعتاً به اندازه حجم فایل، وقفه در save, retrieve و پردازش فایلها بوجود میاد حتی تا چند ثانیه! اما توسط multi-threading میشه بار و وقفه رو بر دوش یه thread دیگه غیر از main thread(اصلی/مادر) انداخت و وقفه رو از بین برد
Logger - میتونه خودش روی thread های مختلفی شنود کنه، درحالی که هر کدوم درحال انجام کار متفاوتی هستن و لاگ ها رو ثبت کنه، و با بسته شدن اون thread ها (به هر دلیلی) کماکان بکارش ادامه بده... نه اینکه متوقف بشه
Live Debugging - می تونه با UI ت channeling کنه و result live بهت بده (از اونجایی که PHP زبان اسکریپتینگه(دره پیته Big Grin)، فکر نمی کنم برای ارتباط با عناصر UI به thread main محدود شده باشی)
بازیهای تحت وب - بهمراه AJAX بازی real-time میشه - عین بازی های دسکتاپی
Networking - در حالت معمول برای انجام عملیات networking(مثلاً file_get_contents یا curl یا...) باید تا تموم شدن عملیات یا timeout صبر کنی و بعد بقیه کارها انجام بشه، اما توسط Multi-threading میشه اون عملیات رو گردن یه thread دیگه انداخت و همزمان بقیه کارها هم انجام بشه
و...
یا میتونی یک عملیات در thread دیگه رو pause کنی، عملیات دیگه ای رو در thread دیگری start کنی، یا حتی wakeup کنی یا کلاً متوقفش کنی(عین برنامه های دسکتاپی)
https://github.com/krakjoe/pthreads/tree...r/examples


در مورد cron-job و multi-threading مطمعن نیستم... فکر نمی کنم اینا قابل مقایسه باشن. مثلاً اگر برنامت در cron کرش کنه، بازم خودش میتونه recovery کنه و مجدداً راه اندازیش کنه. اما اگر برنامه multi-threading ت کرش کنه، از recovery خبری نیست و کلاً برنامه بسته میشه. دو تا چیز نامرتبطن و هرکدوم برای کاری درست شدن
وبلاگ: Yousha.Blog.ir


 کد کمتر => خطای کمتر => قابل فهمتر => خوانایی بالاتر => نگهداری بهتر

  پاسخ
تشکر شده توسط : Reza ayoubsys


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان