PHP ialah bahasa pengaturcaraan yang biasa digunakan dan banyak aplikasi web ditulis dalam PHP. Walau bagaimanapun, PHP mempunyai had yang jelas, iaitu, ia tidak boleh melaksanakan kod secara tak segerak, yang menjadikan PHP tidak cekap dalam beberapa senario konkurensi tinggi dan sukar untuk memenuhi keperluan prestasi.
Apakah itu pelaksanaan tak segerak?
Dalam pengaturcaraan segerak tradisional, kod dilaksanakan baris demi baris mengikut tertib. Jika salah satu fungsi perlu menunggu acara selesai sebelum meneruskan, ia akan menyekat pelaksanaan keseluruhan program. Ini adalah masalah penyekatan dalam pengaturcaraan segerak.
Pengaturcaraan tak segerak adalah berbeza Ia membenarkan kod untuk tidak menyekat pelaksanaan program sementara menunggu acara selesai, tetapi untuk terus melaksanakan kod berikutnya dan mengendalikan tugas lain. Setelah acara selesai, tugas tak segerak akan mendapat hasil pemprosesan dalam bentuk fungsi panggil balik. Pengaturcaraan tak segerak sering digunakan dalam senario aplikasi berintensif I/O yang tinggi dan boleh meningkatkan prestasi program dengan banyak.
Mengapa PHP tidak boleh melaksanakan secara tak segerak?
Menurut spesifikasi sintaks PHP, kod PHP dilaksanakan secara serentak dalam satu proses, dan setiap permintaan akan diproses oleh proses yang berasingan. Ini bermakna apabila permintaan perlu menunggu acara selesai, keseluruhan permintaan disekat dan proses tidak dapat mengendalikan permintaan lain pada masa yang sama.
Selain itu, model pengaturcaraan tak segerak PHP juga akan dihadkan. Oleh kerana pengaturcaraan tak segerak memerlukan sokongan gelung peristiwa (Gelung Acara), apabila terdapat acara baharu, gelung akan melaksanakan fungsi panggil balik berdaftar. Walau bagaimanapun, PHP tidak mempunyai mekanisme gelung peristiwa yang dibina sendiri dan perlu bergantung pada perpustakaan sambungan luaran untuk pelaksanaan. Pustaka sambungan ini mungkin mempunyai isu keserasian, malah mungkin bercanggah dengan tingkah laku PHP sendiri.
Bagaimana untuk menyelesaikan masalah yang PHP tidak boleh laksanakan secara tak segerak?
Walaupun PHP sendiri tidak boleh melaksanakan kod secara tidak segerak, kami boleh memintas masalah ini dalam beberapa cara.
Menggunakan berbilang proses atau berbilang benang membolehkan PHP mengendalikan berbilang permintaan pada masa yang sama, meningkatkan keselarasan dan keupayaan pemprosesan daripada program tersebut. Anda boleh menggunakan sambungan pcntl atau posix yang disediakan oleh PHP, atau gunakan perpustakaan berbilang proses pihak ketiga seperti swoole.
Dalam PHP, kita boleh menggunakan beberapa pustaka sambungan tak segerak, seperti libevent, libev, libuv, dsb. Perpustakaan ini menyediakan mekanisme gelung peristiwa dan mekanisme fungsi panggil balik, membolehkan PHP melaksanakan pengaturcaraan tak segerak.
Sesetengah rangka kerja PHP seperti Laravel, Symfony, dsb. sudah menyokong pengaturcaraan tak segerak Anda boleh menggunakan Promise, Coroutine dan ciri lain dalam rangka kerja untuk dilaksanakan operasi tak segerak.
Menggunakan perisian proksi tak segerak luaran seperti Nginx, Apache, dll., permintaan tak segerak boleh dimajukan ke bahasa lain untuk diproses. Contohnya, gunakan Node.js untuk memproses permintaan tak segerak dan mengembalikan hasilnya kepada PHP. Pendekatan ini boleh memberikan permainan sepenuhnya kepada kekuatan PHP dan bahasa lain dan meningkatkan prestasi keseluruhan.
Kesimpulan
Walaupun PHP tidak dapat melaksanakan kod secara tidak segerak, kami boleh memintas masalah ini dalam beberapa cara dan meningkatkan prestasi dan keupayaan pemprosesan program. Apabila memilih kaedah, ia perlu diputuskan berdasarkan kes demi kes untuk memaksimumkan kesan dalam aplikasi praktikal.
Atas ialah kandungan terperinci Mengapa PHP tidak boleh melaksanakan secara tak segerak? Bagaimana untuk menyelesaikannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!