Rumah  >  Artikel  >  pembangunan bahagian belakang  >  PHP asas kumpulan benang dan kaedah pelaksanaan coroutine

PHP asas kumpulan benang dan kaedah pelaksanaan coroutine

WBOY
WBOYasal
2023-11-08 09:30:39671semak imbas

PHP asas kumpulan benang dan kaedah pelaksanaan coroutine

Kumpulan benang dan kaedah pelaksanaan coroutine di bahagian bawah PHP

Dalam pengaturcaraan PHP, kumpulan benang dan coroutine ialah kaedah penting untuk meningkatkan prestasi dan keupayaan selaras. Artikel ini akan memperkenalkan kaedah asas untuk melaksanakan kumpulan benang dan coroutine dalam PHP, dan memberikan contoh kod khusus.

1. Pelaksanaan kumpulan benang

Kolam benang ialah mekanisme untuk menggunakan semula benang, yang boleh meningkatkan prestasi aplikasi berbilang benang. Dalam PHP, multi-threading boleh digunakan untuk melaksanakan pelbagai tugas secara serentak dan meningkatkan keupayaan concurrency program. Berikut ialah contoh pelaksanaan kumpulan benang PHP yang mudah:

class ThreadPool
{
    private $pool;
    private $maxThreads;

    public function __construct($maxThreads)
    {
        $this->maxThreads = $maxThreads;
        $this->pool = new SplQueue();
    }

    public function run($task)
    {
        if(count($this->pool) < $this->maxThreads) {
            $thread = new Thread($task);
            $thread->start();
            $this->pool->enqueue($thread);
        } else {
            while(count($this->pool) >= $this->maxThreads) {
                usleep(1000);
            }
            $this->run($task); // 递归调用,直到有空闲线程
        }
    }

    public function wait()
    {
        while(!$this->pool->isEmpty()) {
            $thread = $this->pool->dequeue();
            $thread->join();
        }
    }
}

class Thread extends Thread {
    private $task;

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

    public function run() {
        // 执行任务
        call_user_func($this->task);
    }
}

// 示例
$pool = new ThreadPool(5);
for($i = 0; $i < 10; $i++) {
    $task = function() use($i) {
        echo "Task " . $i . " is running in thread " . Thread::getCurrentThreadId() . "
";
        usleep(1000000);
        echo "Task " . $i . " is completed
";
    };
    $pool->run($task);
}
$pool->wait();

Dalam kod di atas, kelas kumpulan benang ThreadPool digunakan untuk mengekalkan benang dalam kumpulan benang, dan boleh menjalankan sehingga benang $maxThreads pada masa yang sama. Benang kelas benang merangkum tugas tertentu dan menggunakan kaedah permulaan untuk memulakan utas untuk melaksanakan tugas.

Jalankan kod sampel dan anda dapat melihat bahawa kumpulan benang akan menjalankan tugasan $maxThreads pada masa yang sama Selepas menyelesaikan satu tugas, ia akan mendapat tugasan seterusnya untuk pelaksanaan.

2. Pelaksanaan coroutine

Coroutine ialah benang ringan yang boleh menjeda dan menyambung semula pelaksanaan pada masa yang berbeza. Dalam PHP, aplikasi yang sangat berskala dan serentak boleh dicapai menggunakan coroutine. Berikut ialah contoh pelaksanaan coroutine PHP yang mudah:

function coroutine() {
    $task = (yield); // 获取第一个任务
    while($task) {
        call_user_func($task);
        $task = (yield); // 获取下一个任务
    }
}

// 示例
$coroutine = coroutine();
$coroutine->send(function() {
    echo "Task 1 is running
";
    usleep(1000000);
    echo "Task 1 is completed
";
});
$coroutine->send(function() {
    echo "Task 2 is running
";
    usleep(1000000);
    echo "Task 2 is completed
";
});

Dalam kod di atas, fungsi coroutine mentakrifkan coroutine yang menjeda dan menyambung semula pelaksanaan melalui kata kunci hasil. Panggil kaedah hantar untuk menghantar tugas, dan gunakan fungsi untuk menentukan tugas tertentu.

Jalankan kod sampel dan anda boleh melihat bahawa coroutine akan melaksanakan tugasan yang dihantar mengikut urutan dan terus melaksanakan tugas seterusnya selepas setiap tugasan selesai.

Kesimpulan

Kumpulan benang asas PHP dan coroutine menyediakan model pengaturcaraan berprestasi tinggi dan konkurensi tinggi. Melalui kumpulan benang, berbilang benang boleh melaksanakan tugas secara serentak dan meningkatkan keupayaan serentak program. Melalui coroutine, aplikasi yang sangat berskala dan sangat serentak boleh dilaksanakan untuk meningkatkan prestasi dan daya pemprosesan sistem.

Di atas ialah kaedah melaksanakan kumpulan benang dan coroutine di bahagian bawah PHP, dan memberikan contoh kod khusus, saya harap ia akan memberikan sedikit bantuan untuk pembaca memahami dan mempelajari pengaturcaraan serentak PHP.

Atas ialah kandungan terperinci PHP asas kumpulan benang dan kaedah pelaksanaan coroutine. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn