PHP.mk документација

pthreads

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

book.pthreads.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека book.pthreads.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
pthreads

Референца за `book.pthreads.php` со подобрена типографија и навигација.

book.pthreads.php

pthreads

Вовед

pthreads is an object-orientated API that provides all of the tools needed for multi-threading in PHP. PHP applications can create, read, write, execute and synchronize with Threads, Workers and Threaded objects.

Ги ескејпува специјалните знаци во стринг за употреба во SQL изјава

This extension is considered unmaintained and dead.

Совети

Consider using parallel instead.

Ги ескејпува специјалните знаци во стринг за употреба во SQL изјава

The pthreads extension cannot be used in a web server environment. Threading in PHP is therefore restricted to CLI-based applications only.

Ги ескејпува специјалните знаци во стринг за употреба во SQL изјава

pthreads (v3) can only be used with PHP 7.2+: This is due to ZTS mode being unsafe in 7.0 and 7.1.

На Нишки class forms the basis of the functionality that allows pthreads to operate. It exposes synchronization methods and some useful interfaces for the programmer.

На Нишка class enables for threads to be created by simply extending it and implementing a run method. Any members can be written to and read by any context with a reference to the thread. Any context can also execute any public and protected methods. The body of the run method will be executed in a separate thread when the Thread::start() method of the implementation is called from the context that created it. Only the context that creates a thread can start and join it.

На Работник class has a persistent state, and will be available from the call to Thread::start() (an inherited method) until the object goes out of scope, or is explicitly shutdown (via Worker::shutdown()). Any context with a reference to the worker object can stack tasks onto the Worker (via Worker::stack()), where these tasks will be executed by the worker in a separate thread. The run method of a worker object will be executed before any objects on the worker's stack, enabling for resources to be initialized that the objects to be executed may need.

На — Интерфејсот Collectable class is used to create a group of workers to distribute Нишки objects amongst them. It is the easiest and most efficient way of using multiple threads in PHP applications.

Безбедност: стандардниот сет на знаци

На — Интерфејсот Collectable класата не го наследува Нишки класа, и затоа објектите базирани на пул се сметаат за нормални PHP објекти. Како такви, неговите инстанци не треба да се споделуваат помеѓу различни контексти.

На — Класата Pool класата е нова за pthreads v3. Се користи за означување на променливи Нишки својства на Нишки класи (бидејќи тие сега се непроменливи по дифолт). Исто така се користи за складирање на PHP низи во Нишки contexts.

Синхронизацијата е важна способност при нишкање. Сите објекти што ги создава pthreads имаат вградена синхронизација во (што ќе им биде познато на Java програмерите) форма на Threaded::wait() and Испрати известување до реферираниот објект. Ова одблокира барем една од блокираните нишки (за разлика од одблокирањето на сите, како што се гледа со. Повикување Threaded::wait() на објект ќе предизвика контекстот да чека друг контекст да повика Испрати известување до реферираниот објект. Ова одблокира барем една од блокираните нишки (за разлика од одблокирањето на сите, како што се гледа со на истиот објект. Овој механизам овозможува моќна синхронизација помеѓу Нишки објекти во PHP.

Безбедност: стандардниот сет на знаци

Сите објекти што се наменети за употреба во повеќенаменските делови на вашата апликација треба да го наследат Нишки.

Складирање податоци: Како општо правило, секој тип на податок што може да се серијализира може да се користи како член на Threaded објект, може да се чита и пишува од кој било контекст со референца до Threaded Object. Не секој тип на податок се складира серијално, основните типови се складираат во нивната вистинска форма. Комплексните типови, низите и објектите што не се Threaded се складираат серијално; тие можат да се читаат и пишуваат во Threaded Object од кој било контекст со референца. Со исклучок на Threaded објектите, секоја референца што се користи за поставување член на Threaded Object е одвоена од референцата во Threaded Object; истите податоци можат да се читаат директно од Threaded Object во секое време од кој било контекст со референца до Threaded Object.

Статички членови: Кога се создава нов контекст ( Thread или Worker ), тие генерално се копираат, но ресурсите и објектите со внатрешна состојба се поништуваат (од безбедносни причини). Ова им овозможува да функционираат како вид локално складирање на нишки. На пример, при стартување на контекстот, класа чии статички членови вклучуваат информации за поврзување со сервер за бази на податоци и самото поврзување, ќе има копирани само едноставните информации за поврзување, а не самото поврзување. Ова му овозможува на новиот контекст да иницира поврзување на ист начин како и контекстот што го создал, складирајќи го поврзувањето на истото место без да влијае на оригиналниот контекст.

Безбедност: стандардниот сет на знаци

Кога се извршуваат print_r, var_dump и други функции за дебагирање на објекти, тие не вклучуваат заштита од рекурзија.

Забелешка: Ресурси: Екстензиите и функционалноста што дефинираат ресурси во PHP се целосно неподготвени за овој вид на средина; pthreads обезбедува одредби за споделување ресурси помеѓу контексти, меѓутоа, за повеќето типови на ресурси треба да се смета за небезбедно. Треба да се користи екстремна претпазливост и грижа при споделување ресурси помеѓу контексти.

Безбедност: стандардниот сет на знаци

Во средината во која работи pthreads, неопходни се некои ограничувања и лимитации за да се обезбеди стабилна средина.

Белешки од корисници 4 белешки

— Поднесува задача до специфичен работник за извршување
пред 8 години
Here are some notes regarding PHP pThreads v3 that I have gathered:
-namespace: It does not understand namespaces. 
-globals: It won't serialize GLOBALS at all! And will not register new ones.
-classes: It registers new classes okay.
-functions: Will not register ANY functions - they must all be in static classes. It does understand PHP native functions. 
-consts: previous constants will transfer over. Don't make any new ones thou!
-pThreads only work in CLI - of course!
-If a thread crashes it automatically gets recreated.
-In order to 'force kill' any thread the parent must be killed. Or wait until all other tasks queued are complete and then terminate.
-Anything registered in a pThread does not seem to join the main thread ... which is good!
-pThreads seem to be very powerful on multi-core environments, just need to be careful on system resources... it can and will lock up a system if mis-configured.
-Finally, finding help for PHP pThreads is slim to none... especially v3!

Good luck!
meadowsjared на gmail точка ком
пред 5 години
In this example, it shows how to use a threaded with a pool to get an array of results, using pThreads v3.2.1 and php 7.3.23

<?php
class TestWork extends Threaded {
//updated version that works with pThreads v3.2.1 and php 7.3.23
    protected $complete;
    //$pData is the data sent to your worker thread to do it's job.
    public function __construct($pData) {
        //transfer all the variables to local variables
        $this->complete = false;
        $this->testData = $pData;
    }
    //This is where all of your work will be done.
    public function run() {
        usleep(2000000); //sleep 2 seconds to simulate a large job
        $this->complete = true;
    }
    public function isDone() {
        return $this->complete;
    }
}
class ExamplePool extends Pool {
    public $data = array(); // used to return data after we're done
    private $numTasks = 0; // counter used to know when we're done
    /**
     * override the submit function from the parent
     * to keep track of our jobs
     */
    public function submit(Threaded $task) {
        $this->numTasks++;
        parent::submit($task);
    }
    /**
     * used to wait until all workers are done
     */
    public function process() {
        // Run this loop as long as we have
        // jobs in the pool
        while (count($this->data) < $this->numTasks) {
            $this->collect(function (TestWork $task) {
                // If a task was marked as done
                // collect its results
                if ($task->isDone()) {
                    $tmpObj = new stdclass();
                    $tmpObj->complete = $task->complete;
                    //this is how you get your completed data back out [accessed by $pool->process()]
                    $this->data[] = $tmpObj;
                }
                return $task->isDone();
            });
        }
        // All jobs are done
        // we can shutdown the pool
        $this->shutdown();
        return $this->data;
    }
}
$pool = new ExamplePool(3);
$testData = 'asdf';
for($i=0;$i<5;$i++) {
    $pool->submit(new TestWork($testData));
}
$retArr = $pool->process(); //get all of the results
echo '<pre>';
print_r($retArr); //return the array of results (and maybe errors)
echo '</pre>';
?>
jasonrlester на yahoo точка com
12 години пред
Note that this extension *is* a high level implementation of POSIX threads, including on Windows (which is why pthreadsV*.dll is required)
админ на deosnet dot com
пред 11 години
Hello,

WARNING : When using Stackable objects in callable functions by your Threads, you must be very careful if you use it as an array. Indeed, if you do not copy your Stackable "array" in a local variable, the execution time can drop drastically !

Also, if you want to modify an array() in a function, you will also store in a local variable in order that your array is in a thread-safe context.
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.