Rumah > pembangunan bahagian belakang > tutorial php > Cara menggunakan Fibers untuk mencapai konkurensi dalam PHP8.0

Cara menggunakan Fibers untuk mencapai konkurensi dalam PHP8.0

PHPz
Lepaskan: 2023-05-14 11:44:02
asal
2016 orang telah melayarinya

Dengan pembangunan berterusan teknologi Internet moden, bilangan lawatan tapak web semakin meningkat, yang juga mengemukakan keperluan yang lebih tinggi untuk keupayaan pemprosesan serentak pelayan. Bagaimana untuk meningkatkan keupayaan pemprosesan serentak pelayan adalah masalah yang perlu dihadapi oleh setiap pembangun. Dalam konteks ini, PHP8.0 memperkenalkan ciri baharu Fibers, membolehkan pembangun PHP menguasai cara baharu pemprosesan serentak.

Apakah itu Fibers?

Pertama, kita perlu faham apa itu Fiber. Gentian ialah benang ringan yang menyokong pemprosesan tak segerak kod PHP dengan cekap. Kod PHP tradisional adalah satu-benang dan tidak boleh benar-benar melaksanakan operasi tak segerak Ia selalunya perlu menunggu untuk menyelesaikan operasi I/O, mengakibatkan sekatan yang tidak perlu. Kemunculan Fibers menyelesaikan masalah ini, membenarkan kod PHP menyokong pemprosesan serentak seperti bahasa lain seperti Node.js.

Menggunakan Fibers untuk mencapai konkurensi

Mari kita bincangkan tentang cara menggunakan Fibers untuk mencapai konkurensi.

  1. Pasang sambungan Swoole

Dalam PHP8.0, Fibers dilaksanakan berdasarkan sambungan Swoole, jadi anda perlu memasang sambungan Swoole terlebih dahulu. Ia boleh dipasang melalui PECL:

pecl install swoole 
Salin selepas log masuk
  1. Mencipta objek Fiber

Menggunakan Fiber untuk mencapai konkurensi memerlukan mencipta objek Fiber. Mencipta objek Fiber boleh dicapai dengan mencipta fungsi tanpa nama atau kaedah kelas. Contohnya:

$fiber = new SwooleFiber(function() {
  // 这里是并发要执行的代码
});

或

class MyClass {
  public function onReceive($server, $fd, $reactor_id, $data) {
    // 这里是并发要执行的代码
  }
}
$fiber = new SwooleFiber([$myClass, 'onReceive']);
Salin selepas log masuk
  1. Mulakan Fiber

Selepas mencipta objek Fiber, anda perlu memulakan Fiber. Anda boleh menggunakan kaedah start atau kaedah suspend untuk memulakan Fiber. Gunakan kaedah start untuk segera memulakan Fiber dan laksanakan kod yang ditakrifkan dalam Fiber. Contohnya:

$fiber->start();
Salin selepas log masuk

dan kaedah suspend boleh menjeda pelaksanaan Fiber dan menunggu pelaksanaan seterusnya. Contohnya:

$fiber->suspend();
Salin selepas log masuk
  1. Tukar Fiber

Dalam Fiber, gunakan fungsi swoole_fiber_switch untuk menukar pelaksanaan Fiber. Contohnya:

function foo() {
  echo 'foo ';
  yield;
  echo 'bar ';
  yield;
  echo 'baz';
}
$fiber1 = new SwooleFiber($foo);
$fiber2 = new SwooleFiber($foo);
$fiber1->start();
$fiber2->start();
while ($fiber1->getStatus() !== SwooleFiber::STATUS_DEAD || $fiber2->getStatus() !== SwooleFiber::STATUS_DEAD) {
  if ($fiber1->getStatus() !== SwooleFiber::STATUS_DEAD) {
    swoole_fiber_switch($fiber1);
  }
  if ($fiber2->getStatus() !== SwooleFiber::STATUS_DEAD) {
    swoole_fiber_switch($fiber2);
  }
}
Salin selepas log masuk

Dalam contoh di atas, kami mencipta dua objek Fiber dan biarkan ia dilaksanakan secara berselang-seli dan mengeluarkan foobarbaz.

  1. Menggunakan API coroutine

Selain menukar Fiber secara manual, sambungan Swoole juga menyediakan beberapa API coroutine untuk pemprosesan serentak yang mudah. Contohnya, gunakan kaedah Co::create untuk mencipta objek coroutine dan gunakan Co::parallel untuk membenarkan berbilang coroutine dilaksanakan secara selari. Contohnya:

$urls = [
  'http://example.com/foo',
  'http://example.com/bar',
  'http://example.com/baz',
];
$coros = [];
foreach ($urls as $url) {
  $coros[] = Co::create(function() use ($url) {
    $html = file_get_contents($url);
    return strlen($html);
  });
}
$results = Co::parallel($coros);
Salin selepas log masuk

Dalam contoh di atas, kami mencipta tiga objek coroutine, masing-masing mengakses tiga URL dan akhirnya menggunakan kaedah Co::parallel untuk melaksanakan ketiga-tiga coroutine ini secara selari, mendapatkan keputusan dan mengembalikannya.

Ringkasan

Fibers ialah ciri baharu yang diperkenalkan dalam PHP8.0, yang menggunakan sepenuhnya keupayaan pemprosesan serentak Swoole yang dilanjutkan. Menggunakan Fibers boleh melaksanakan pemprosesan tak segerak kod PHP dengan mudah dan meningkatkan keupayaan pemprosesan serentak pelayan. Sudah tentu, Fibers juga perlu digunakan dengan berhati-hati dan perhatian harus diberikan untuk mengelakkan persaingan sumber dan isu lain. Saya berharap pengenalan artikel ini dapat membantu pembangun PHP memahami Fibers dengan lebih baik dan melaksanakan pemprosesan serentak yang lebih baik.

Atas ialah kandungan terperinci Cara menggunakan Fibers untuk mencapai konkurensi dalam PHP8.0. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan