Rumah >pembangunan bahagian belakang >tutorial php >Pengenalan ke dalam gelung acara di PHP

Pengenalan ke dalam gelung acara di PHP

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌asal
2025-02-17 10:37:09529semak imbas

PHP Event Loop: Senjata untuk Pengaturcaraan Asynchronous

mata teras

  • PHP Event Loop adalah struktur pengaturcaraan yang digunakan untuk menunggu peristiwa atau mesej dalam penjadual, terutama untuk mengendalikan operasi tak segerak.
  • Pengaturcaraan PHP tradisional adalah segerak, melakukan satu operasi pada satu masa, dan menunggu setiap operasi selesai sebelum meneruskan operasi seterusnya. Walaupun gelung acara membolehkan pengaturcaraan tak segerak, di mana operasi boleh dimulakan dan kemudian ditahan sehingga hasilnya siap, operasi lain boleh dilakukan pada masa ini.
  • perpustakaan seperti ReactPhp atau AMP menyediakan antara muka dan kelas yang diperlukan untuk membuat dan mengurus gelung acara PHP, yang membolehkan penggunaan sumber yang lebih baik dan masa tindak balas yang lebih pendek, terutamanya dalam aplikasi yang perlu mengendalikan sejumlah besar sambungan serentak.
  • Walaupun gelung acara dapat memberikan manfaat prestasi yang signifikan, mereka juga dapat meningkatkan kerumitan permohonan, memerlukan gaya pengaturcaraan yang berlainan, dan mungkin membuat kod lebih sukar untuk difahami dan debug. Tidak semua tugas sesuai untuk pemprosesan tak segerak, dan beberapa tugas mungkin lebih sukar untuk dilaksanakan dalam gelung acara.

pemaju php sentiasa menunggu sesuatu. Kadang -kadang kita menunggu permintaan untuk perkhidmatan jauh. Kadang -kadang kita menunggu pangkalan data untuk mengembalikan baris dari pertanyaan kompleks. Bukankah itu hebat jika kita dapat melakukan operasi lain dalam semua tempoh menunggu?

Jika anda telah menulis beberapa kod JS, anda mungkin sudah biasa dengan panggilan balik dan acara DOM. Walaupun kami juga mempunyai panggilan balik dalam PHP, mereka tidak berfungsi dengan cara yang sama. Ini adalah terima kasih kepada ciri yang dipanggil Event Loop.

An Introduction into Event Loops in PHP Kami akan memahami bagaimana gelung acara berfungsi dan cara menggunakan gelung acara di PHP.

Kami akan melihat beberapa perpustakaan PHP yang menarik. Sesetengah orang percaya bahawa perpustakaan ini tidak cukup stabil untuk digunakan dalam persekitaran pengeluaran. Sesetengah orang berfikir contoh yang disediakan di sini adalah "lebih baik dilaksanakan dalam bahasa yang lebih matang". Terdapat banyak sebab yang baik untuk mencuba kaedah ini. Terdapat juga sebab yang baik untuk mengelakkan kaedah ini dalam persekitaran pengeluaran. Tujuan artikel ini adalah untuk menyerlahkan kemungkinan dalam PHP.

tempat menunggu

Untuk memahami gelung acara, mari kita lihat bagaimana mereka bekerja di penyemak imbas. Lihat contoh ini:

<code class="language-javascript">function fitToScreen(selector) {
    var element = document.querySelector(selector);

    var width = element.offsetWidth;
    var height = element.offsetHeight;

    var top = "-" + (height / 2) + "px";
    var left = "-" + (width / 2) + "px";

    var ratio = getRatio(width, height);

    setStyles(element, {
        "position": "absolute",
        "left": "50%",
        "top": "50%",
        "margin": top + " 0 0 " + left,
        "transform": "scale(" + ratio + ", " + ratio + ")"
    });
}

function getRatio(width, height) {
    return Math.min(
        document.body.offsetWidth / width,
        document.body.offsetHeight / height
    );
}

function setStyles(element, styles) {
    for (var key in styles) {
        if (element.style.hasOwnProperty(key)) {
            element.style[key] = styles[key];
        }
    }
}

fitToScreen(".welcome-screen");</code>

Kod ini tidak memerlukan perpustakaan tambahan. Ia berfungsi dalam mana -mana penyemak imbas yang menyokong penukaran zum CSS. Versi Chrome terkini sudah cukup. Hanya pastikan pemilih CSS sepadan dengan unsur -unsur dalam dokumen.

Fungsi ini menerima pemilih dan pusat CSS dan skala unsur -unsur yang sesuai dengan skrin. Apa yang berlaku jika kita membuang kesilapan dalam gelung untuk? Kami akan melihat sesuatu seperti ini ...

An Introduction into Event Loops in PHP

kami panggil stack stack senarai fungsi ini. Inilah bahagian dalam timbunan yang digunakan oleh penyemak imbas. Mereka akan memproses kod ini dalam langkah ...

An Introduction into Event Loops in PHP

Ini seperti bagaimana PHP menggunakan timbunan untuk menyimpan konteks. Pelayar melangkah lebih jauh dan menyediakan WebAPI untuk kandungan seperti acara DOM dan panggilan balik Ajax. Dalam keadaan semulajadi, JavaScript tidak segerak sebagai PHP. Iaitu: Walaupun kedua-duanya seolah-olah dapat melakukan banyak operasi pada masa yang sama, kedua-duanya adalah satu-satunya. Mereka hanya boleh melakukan satu perkara pada satu masa.

Menggunakan WebAPIS penyemak imbas seperti SetTimeout dan AddEventListener, kita boleh mengimbangi kerja selari dengan benang yang berbeza. Apabila peristiwa ini berlaku, penyemak imbas menambah panggilan balik ke giliran panggil balik. Apabila timbunan kosong pada masa akan datang, penyemak imbas mengambil panggilan balik dari giliran panggil balik dan melaksanakannya.

Proses ini membersihkan timbunan dan kemudian memanggil giliran kembali adalah gelung acara.

kehidupan tanpa gelung acara

di JS, kita boleh menjalankan kod berikut:

<code class="language-javascript">function fitToScreen(selector) {
    var element = document.querySelector(selector);

    var width = element.offsetWidth;
    var height = element.offsetHeight;

    var top = "-" + (height / 2) + "px";
    var left = "-" + (width / 2) + "px";

    var ratio = getRatio(width, height);

    setStyles(element, {
        "position": "absolute",
        "left": "50%",
        "top": "50%",
        "margin": top + " 0 0 " + left,
        "transform": "scale(" + ratio + ", " + ratio + ")"
    });
}

function getRatio(width, height) {
    return Math.min(
        document.body.offsetWidth / width,
        document.body.offsetHeight / height
    );
}

function setStyles(element, styles) {
    for (var key in styles) {
        if (element.style.hasOwnProperty(key)) {
            element.style[key] = styles[key];
        }
    }
}

fitToScreen(".welcome-screen");</code>
Apabila kita menjalankan kod ini, kita lihat di luar waktu tamat dalam konsol, dan kemudian di dalam waktu tamat. Fungsi SetTimeout adalah sebahagian daripada WebAPI yang disediakan oleh penyemak imbas. Selepas 1 milisaat telah berlalu, mereka menambah panggilan balik ke giliran panggil balik.

Console.log kedua dilakukan sebelum konsol.log dari dalam setTimeout bermula. Kami tidak mempunyai apa -apa seperti setTimeout dalam php standard, tetapi jika kita perlu mensimulasikannya:

<code class="language-javascript">setTimeout(function() {
    console.log("inside the timeout");
}, 1);

console.log("outside the timeout");</code>
Apabila kita menjalankannya, kita lihat di dalam waktu tamat, kemudian di luar waktu tamat. Ini kerana kita perlu menggunakan gelung tak terhingga dalam fungsi setTimeout untuk melaksanakan panggilan balik selepas kelewatan.

Ia boleh menggoda untuk bergerak semasa gelung di luar setTimeout dan memasukkan semua kod di dalamnya. Ini mungkin membuat kod kami berasa kurang disekat, tetapi pada satu ketika, kami akan sentiasa disekat oleh gelung itu. Pada satu ketika, kita akan melihat bahawa kita hanya boleh melakukan satu perkara dalam satu benang pada satu masa.

Walaupun tidak ada yang seperti setTimeout dalam PHP standard, terdapat cara yang tidak jelas untuk melaksanakan kod yang tidak menyekat selari dengan gelung acara. Kita boleh menggunakan fungsi seperti stream_select untuk membuat rangkaian iOS yang tidak menyekat. Kita boleh menggunakan sambungan C seperti EIO untuk membuat kod sistem fail yang tidak menyekat. Mari kita lihat perpustakaan yang dibina di atas kaedah yang tidak jelas ini ...

icicle

icicle adalah perpustakaan komponen yang mengambil kira gelung acara. Mari lihat contoh mudah:

<code class="language-php">function setTimeout(callable $callback, $delay) {
    $now = microtime(true);

    while (true) {
        if (microtime(true) - $now > $delay) {
            $callback();
            return;
        }
    }
}

setTimeout(function() {
    print "inside the timeout";
}, 1);

print "outside the timeout";</code>

Ini menggunakan versi icicleicio/icicle 0.8.0

pelaksanaan gelung acara icicle adalah hebat. Ia juga mempunyai banyak ciri yang mengagumkan; seperti janji, soket, dan pelaksanaan pelayan.

icicle juga menggunakan penjana sebagai coroutine. Penjana dan coroutine adalah topik yang berbeza, tetapi kod yang mereka benarkan cantik:

<code class="language-php">use Icicle\Loop;

Loop\timer(0.1, function() {
    print "inside timer";
});

print "outside timer";

Loop\run();</code>

Ini menggunakan versi ICILLEIO/DNS 0.5.0 Penjana untuk membuat kod asynchronous menulis yang serupa dengan kod segerak yang lebih mudah. Apabila digabungkan dengan janji dan gelung acara, mereka menghasilkan kod yang tidak menyekat yang sangat baik seperti ini!

ReactPhp

ReactPhp mempunyai pelaksanaan gelung acara yang sama, tetapi tanpa semua kandungan penjana yang menarik:

<code class="language-javascript">function fitToScreen(selector) {
    var element = document.querySelector(selector);

    var width = element.offsetWidth;
    var height = element.offsetHeight;

    var top = "-" + (height / 2) + "px";
    var left = "-" + (width / 2) + "px";

    var ratio = getRatio(width, height);

    setStyles(element, {
        "position": "absolute",
        "left": "50%",
        "top": "50%",
        "margin": top + " 0 0 " + left,
        "transform": "scale(" + ratio + ", " + ratio + ")"
    });
}

function getRatio(width, height) {
    return Math.min(
        document.body.offsetWidth / width,
        document.body.offsetHeight / height
    );
}

function setStyles(element, styles) {
    for (var key in styles) {
        if (element.style.hasOwnProperty(key)) {
            element.style[key] = styles[key];
        }
    }
}

fitToScreen(".welcome-screen");</code>

Ini menggunakan versi React/Event-loop 0.4.1

ReactPhp lebih matang daripada icicle dan mempunyai pelbagai komponen yang lebih luas. Icicle masih jauh untuk bersaing dengan semua ciri -ciri yang ditawarkan ReactPhp. Walau bagaimanapun, pemaju membuat kemajuan yang baik!

Kesimpulan

Sukar untuk menghilangkan minda tunggal yang kami diajar. Jika kita mempunyai akses kepada API yang tidak menyekat dan gelung acara, kita tidak tahu berapa banyak kod yang boleh kita tulis.

Komuniti PHP perlu memahami seni bina ini. Kita perlu belajar dan bereksperimen dengan pelaksanaan asynchronous dan selari. Kita perlu mencuri konsep dan amalan terbaik dari bahasa lain yang mempunyai gelung acara selama bertahun -tahun sehingga "bagaimana menggunakan sumber sistem yang paling berkesan?"

Tinggal untuk pelaksanaan yang lebih praktikal mengenai icicle yang akan datang!

FAQ Loop Event Php

Apakah peranan gelung acara dalam php?

Gelung acara dalam PHP adalah struktur pengaturcaraan yang digunakan untuk menunggu peristiwa atau mesej dalam penjadual. Ia berfungsi dengan menjejaki setiap peristiwa aktif sebagai tindak balas kepada rangsangan luar dan menjadualkannya apabila mereka selesai. Ini amat berguna dalam PHP untuk mengendalikan operasi tak segerak, di mana anda ingin memulakan operasi dan kemudian terus memproses tanpa menunggu operasi selesai.

Bagaimana perbezaan antara gelung acara dan pengaturcaraan PHP tradisional?

Pengaturcaraan PHP tradisional adalah segerak, yang bermaksud ia melakukan satu operasi pada satu masa, mengikut urutan yang ditulis, dan mesti menunggu setiap operasi selesai sebelum meneruskan operasi seterusnya. Sebaliknya, gelung acara membolehkan pengaturcaraan tak segerak. Ini bermakna tindakan itu boleh dimulakan dan kemudian ditahan sehingga hasilnya siap, di mana tindakan lain dapat dilakukan.

Bagaimana untuk melaksanakan gelung acara dalam aplikasi PHP saya?

Melaksanakan gelung acara dalam aplikasi PHP anda melibatkan penggunaan perpustakaan yang menyediakan fungsi ini, seperti ReactPhp atau amp. Perpustakaan ini menyediakan antara muka dan kelas yang diperlukan untuk membuat dan mengurus gelung acara. Anda kemudian boleh menggunakan gelung acara ini untuk mengendalikan tugas -tugas yang tidak segerak dalam permohonan anda.

Apakah faedah menggunakan gelung acara PHP?

Menggunakan gelung acara di PHP dapat meningkatkan prestasi aplikasi dan respons. Ia membolehkan anda memproses pelbagai tugas secara serentak, bukannya secara berurutan, yang boleh membawa kepada penggunaan sumber yang lebih baik dan masa tindak balas yang lebih pendek. Ini amat berfaedah dalam aplikasi yang memerlukan pengendalian sejumlah besar sambungan serentak, seperti pelayan sembang atau suapan data masa nyata.

Apakah kelemahan menggunakan gelung acara PHP?

Walaupun gelung acara dapat memberikan manfaat prestasi yang signifikan, mereka juga dapat meningkatkan kerumitan permohonan. Mereka memerlukan gaya pengaturcaraan yang berbeza dan boleh membuat kod lebih sukar difahami dan debug. Selain itu, tidak semua tugas sesuai untuk pemprosesan tak segerak, dan beberapa tugas mungkin lebih sukar untuk dilaksanakan dalam gelung acara.

Bolehkah saya menggunakan gelung acara dengan kerangka PHP seperti Laravel atau Symfony?

Ya, gelung acara boleh digunakan dengan kerangka PHP seperti Laravel atau Symfony, walaupun ini mungkin memerlukan beberapa konfigurasi tambahan. Kedua -dua kerangka ini direka untuk bekerja dengan kod PHP segerak, tetapi mereka boleh disesuaikan untuk bekerja dengan gelung acara untuk mengendalikan tugas -tugas yang tidak segerak.

Bagaimana menangani kesilapan dalam gelung acara?

Pengendalian ralat dalam gelung acara mungkin lebih rumit daripada pengendalian ralat dalam kod PHP yang disegerakkan. Oleh kerana tugas itu dilaksanakan secara tidak segerak, kesilapan itu tidak dapat ditangkap dengan segera. Sebaliknya, anda biasanya perlu menyediakan fungsi panggil balik yang akan dipanggil apabila ralat berlaku.

Bolehkah saya menggunakan gelung acara dalam skrip PHP CLI?

Ya, anda boleh menggunakan gelung acara dalam skrip PHP CLI (Command Line Interface). Malah, ini adalah kes penggunaan biasa untuk gelung acara, kerana skrip CLI sering memerlukan pelbagai tugas untuk dilaksanakan secara serentak.

Bagaimana gelung acara berfungsi dengan koleksi sampah PHP?

Koleksi sampah PHP berfungsi secara bebas dari gelung acara. Walau bagaimanapun, kerana gelung acara mengekalkan rujukan kepada semua tugas aktif, tugas -tugas ini hanya akan dibuang sampah selepas selesai. Ini bermakna anda perlu berhati -hati untuk mengelakkan kebocoran memori dalam kod gelung acara.

Bolehkah saya menggunakan gelung acara dengan pelayan terbina dalam PHP?

Ya, anda boleh menggunakan gelung acara dengan pelayan terbina dalam PHP. Walau bagaimanapun, ingat bahawa pelayan terbina dalam tidak direka untuk tujuan pengeluaran dan mungkin tidak memberikan tahap prestasi atau kebolehpercayaan yang sama sebagai pelayan web yang berdedikasi.

Atas ialah kandungan terperinci Pengenalan ke dalam gelung acara di PHP. 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