Sebagai bahasa pengaturcaraan Web, PHP memainkan peranan yang sangat penting dalam pembangunan Web. Dalam aplikasi web sebenar, selalunya perlu melakukan beberapa tugas yang memakan masa, seperti memproses sejumlah besar data, menghantar e-mel, dsb. Jika tugasan ini dilaksanakan secara serentak, ia akan membawa masa menunggu yang sangat lama kepada pengguna dan menjejaskan pengalaman pengguna.
Untuk menyelesaikan masalah ini, PHP menyediakan pengurusan tugas tak segerak dan fungsi pelaksanaan, yang membolehkan program PHP tidak disekat apabila melaksanakan tugas tak segerak, tetapi boleh terus memproses permintaan lain. Artikel ini akan memperkenalkan kaedah dan prinsip pelaksanaan pengurusan tugas tak segerak dan pelaksanaan dalam PHP.
1. Pengurusan tugas tak segerak
(1) Berbilang benang
Berbilang benang adalah pelaksanaan Cara biasa tugas tak segerak. Dalam PHP, multi-threading boleh dilaksanakan dengan mudah menggunakan sambungan pthreads, contohnya:
class TestThreaded extends Threaded { public function run(){ // 这里是执行的异步任务 } } $test = new TestThreaded(); $test->start();
Kelas TestThreaded di sini mewarisi daripada kelas Threaded dan mengatasi kaedah run() yang melaksanakan tugasan tak segerak. Dengan memanggil kaedah start(), benang akan dimulakan dan tugas tak segerak akan mula dilaksanakan.
(2) Baris Gilir Mesej
Baris gilir mesej juga merupakan kaedah pengurusan tugas tak segerak yang biasa digunakan. Baris gilir mesej yang disokong dalam PHP termasuk Redis, RabbitMQ, dll. Dengan menambahkan tugas pada baris gilir mesej, dan kemudian melihat pelaksanaan tugas tak segerak melalui log, e-mel atau kaedah lain.
Pengurusan tugas tak segerak dilakukan terutamanya dengan menyerahkan tugas kepada utas atau proses lain, dengan itu mengelakkan utas utama disekat oleh tugas soalan. Prinsip pelaksanaan multi-threading ialah sistem pengendalian menguruskan sumber thread pada peringkat kernel untuk menghalang satu thread daripada menyekat thread lain. Prinsip pelaksanaan baris gilir mesej adalah untuk menambah tugas pada baris gilir dan menunggu proses atau utas lain untuk dilaksanakan.
2. Pelaksanaan tugas tak segerak
(1) Swoole
Swoole ialah versi PHP Rangka kerja pengaturcaraan rangkaian tak segerak boleh merealisasikan I/O tak segerak, tugas tak segerak, pelbagai proses dan fungsi lain, dan mempunyai ciri prestasi tinggi dan penggunaan rendah. Dengan menggunakan Swoole pada pelayan untuk menyediakan perkhidmatan tugas tak segerak, pelanggan boleh menyerahkan tugas tak segerak kepada pelayan melalui permintaan HTTP atau kaedah lain untuk mencapai pelaksanaan tak segerak.
(2) Curl Multi
Curl Multi ialah sambungan PHP yang menyokong pemprosesan berbilang permintaan Curl pada masa yang sama. Dengan menggunakan Curl Multi untuk melaksanakan pelaksanaan tugas asynchronous, keupayaan concurrency program boleh dipertingkatkan, contohnya:
$ch1 = curl_init(); curl_setopt($ch1, CURLOPT_URL, "http://www.example.com/"); curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true); $ch2 = curl_init(); curl_setopt($ch2, CURLOPT_URL, "http://www.example.org/"); curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true); $mh = curl_multi_init(); curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); do { $status = curl_multi_exec($mh, $active); if ($active) { curl_multi_select($mh); } } while ($active && $status == CURLM_OK); curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh);
Di sini dua permintaan Curl dicipta, dan kemudian ia ditambahkan pada baris gilir pelaksanaan Curl Multi melalui kaedah curl_multi_add_handle(), Akhirnya, pelaksanaan tak segerak dilakukan melalui kaedah curl_multi_exec().
Ciri pelaksanaan tugas segerak ialah urutan utama akan menunggu pelaksanaan tugas selesai sebelum meneruskan, manakala tugas tak segerak pelaksanaan tidak menunggu tugas Selesai. Swoole ialah pelaksanaan tugas tak segerak melalui I/O berbilang benang dan tidak menyekat. Curl Multi dilaksanakan melalui permintaan Curl tak segerak.
3. Ringkasan
Dalam aplikasi web sebenar, pengurusan tugasan tak segerak dan pelaksanaan adalah fungsi yang sangat berguna. Ia boleh meningkatkan keupayaan serentak program, mengurangkan masa tindak balas dan meningkatkan pengalaman pengguna. PHP menyediakan pelbagai cara untuk melaksanakan tugas tak segerak, seperti berbilang benang, baris gilir mesej, Swoole, Curl Multi, dsb. Kaedah pelaksanaan yang berbeza mempunyai kelebihan dan kekurangan mereka sendiri, dan ia harus dipilih berdasarkan senario perniagaan.
Atas ialah kandungan terperinci Pengurusan tugas tak segerak dan pelaksanaan dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!