


Pengaturcaraan Multi-threaded Php7: Menggunakan Pelanjutan PCNTL untuk melaksanakan pemprosesan serentak
May 28, 2025 pm 03:15 PMPHP boleh mencapai kesesuaian pelbagai proses dalam persekitaran CLI melalui lanjutan PCNTL. 1. Pertama, pastikan pelanjutan PCNTL dipasang dan didayakan. Anda boleh menyemak melalui php -m. Jika ia tidak diaktifkan, anda perlu mengkompilasi semula PHP dan menambah parameter-yang boleh dipertahankan; 2. Gunakan pcntl_fork () untuk membuat proses kanak -kanak. Proses induk mengembalikan PID proses kanak -kanak, proses kanak -kanak mengembalikan 0, dan kegagalan pulangan -1, yang boleh digunakan untuk memisahkan dan melaksanakan logik yang berbeza; 3. Anda boleh melengkapkan garpu pelbagai proses kanak -kanak untuk memproses tugas secara serentak, setiap proses kanak -kanak melaksanakan tugas secara bebas, dan proses induk menggunakan pcntl_waitpid () untuk menunggu semua proses kanak -kanak selesai; 4. Perhatikan persaingan sumber, proses zombie, overhead prestasi, dan kerumitan debugging, dan menguruskan kitaran hayat proses dan akses sumber yang dikongsi bersama.
PHP sendiri bukan bahasa yang direka untuk multithreading, terutamanya dalam permintaan web tradisional, PHP lebih suka model yang meminta satu proses/benang. Tetapi jika anda menjalankan skrip PHP dalam persekitaran CLI dan ingin menggunakan CPU multi-teras untuk meningkatkan kecekapan pemprosesan tugas, anda boleh menggunakan lanjutan PCNTL
untuk mencapai kesan konvensional "multi-threaded".
PCNTL adalah lanjutan untuk kawalan proses yang disediakan oleh PHP. Ia menyerupai pelaksanaan serentak pelbagai tugas melalui proses anak garpu. Walaupun ia bukan benang dalam erti kata sebenar, ia mencukupi dalam banyak senario.
Mari kita lihat cara menggunakan PCNTL untuk melaksanakan pemprosesan konkurensi mudah.
1. Pasang dan aktifkan sambungan PCNTL
Pemasangan PHP di bawah kebanyakan sistem Linux tidak mempunyai PCNTL secara lalai. Anda perlu memastikan bahawa parameter --enable-pcntl
ditambah semasa pemasangan. Sekiranya anda menggunakan sistem seperti Ubuntu, anda boleh menyemaknya seperti berikut:
php -m | grep pcntl
Sekiranya tiada pcntl
dalam output, anda perlu mengkompilasi semula atau memasang versi PHP dengan sambungan ini.
Nota: PHP di bawah Windows tidak menyokong PCNTL, jadi kaedah ini hanya boleh digunakan untuk sistem seperti UNIX (seperti Linux dan MACOS).
2. Buat proses kanak -kanak menggunakan pcntl_fork
Fungsi teras PCNTL untuk melaksanakan kesesuaian adalah pcntl_fork()
, yang akan membuat salinan proses semasa (iaitu proses kanak -kanak). Proses induk dan proses kanak -kanak hampir sama, kecuali nilai pulangan adalah berbeza:
- Dalam proses induk,
pcntl_fork()
mengembalikan PID proses kanak -kanak; - Dalam proses kanak -kanak, nilai pulangan adalah 0;
- Jika ralat berlaku, kembali -1.
Untuk memberi contoh mudah:
$ pid = pcntl_fork (); jika ($ pid == -1) { mati ('garpu gagal'); } elseif ($ pid == 0) { // Subprocess Logic Echo "Saya Proses Anak \ N"; keluar (); // Proses kanak -kanak mesti keluar selepas pelaksanaan} else { // Proses induk logik echo "Saya proses induk, dan PID proses kanak -kanak adalah $ pid \ n"; }
Ini akan memulakan proses kanak -kanak dan membiarkannya menjalankan logiknya sendiri secara bebas.
3. Jalankan banyak proses kanak -kanak secara serentak untuk memproses tugas
Dalam perkembangan sebenar, kita sering perlu menjalankan pelbagai proses kanak -kanak pada masa yang sama untuk memproses tugas secara serentak. Sebagai contoh, anda ingin memuat turun beberapa halaman web secara serentak, memproses pelbagai fail, dll.
Anda boleh menggunakan gelung untuk memainkan pelbagai proses kanak -kanak, setiap anak memproses satu tugas. Kod sampel adalah seperti berikut:
$ tugas = ['a', 'b', 'c']; foreach ($ tugas sebagai $ tugas) { $ pid = pcntl_fork (); jika ($ pid == -1) { mati ("garpu gagal"); } elseif ($ pid == 0) { // Proses kanak -kanak melaksanakan tugas echo "Mulakan tugas: $ tugas \ n"; tidur (2); // Simulasi Operasi yang memakan masa echo "Lengkapkan tugas: $ tugas \ n"; keluar (); // proses anak berakhir} } // Proses induk menunggu semua proses kanak -kanak berakhir sementara (pcntl_waitpid (0, $ status)> 0);
Kod ini akan memulakan tiga proses kanak -kanak pada masa yang sama untuk memproses tiga tugas A, B, dan C. Akhirnya, proses induk menunggu semua proses kanak -kanak selesai melalui pcntl_waitpid
sebelum keluar.
Nota: Jika Waitpid tidak ditambah, proses induk mungkin berakhir lebih awal, menyebabkan terminal itu dipaparkan kembali ke baris arahan, tetapi proses anak masih berjalan di latar belakang, yang mungkin bukan hasil yang anda inginkan.
4. Langkah berjaga -jaga dan Soalan Lazim
- Persaingan Sumber : Apabila banyak kanak -kanak memproses sumber -sumber yang dikongsi bersama (seperti menulis fail yang sama), berhati -hati untuk mengunci, jika tidak, kesilapan terdedah kepada kesilapan.
- Proses Zombie : Jika proses kanak -kanak tidak dikitar semula oleh proses induk selepas selesai, ia akan menjadi proses zombie. Menggunakan
pcntl_waitpid()
boleh mengelakkan masalah ini. - Pertimbangan Prestasi : Walaupun garpu cepat, jika tugas itu sendiri ringan, garpu kerap boleh menjejaskan prestasi.
- Kesukaran Debugging : Debugging Skrip Multi-Proses lebih rumit daripada proses tunggal. Adalah disyorkan untuk menulis mekanisme pembalakan yang baik terlebih dahulu.
Pada dasarnya itu sahaja. Walaupun menggunakan PCNTL untuk kesesuaian bukan benang sebenar, ia memang pilihan praktikal dalam senario PHP CLI. Selagi anda memberi perhatian kepada pengurusan proses dan koordinasi sumber, ia boleh digunakan untuk meningkatkan kecekapan pelaksanaan tugas batch.
Atas ialah kandungan terperinci Pengaturcaraan Multi-threaded Php7: Menggunakan Pelanjutan PCNTL untuk melaksanakan pemprosesan serentak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Checkifthetouchpadisdisabledbyusingthefunctionkey(Fn F6/F9/F12),adedicatedtogglebutton,orensuringit’sturnedoninSettings>Devices>Touchpad,andunplugexternalmice.2.UpdateorreinstallthetouchpaddriverviaDeviceManagerbyselectingUpdatedriverorUninstal

OKX adalah platform perkhidmatan aset digital yang terkenal di dunia, menyediakan pengguna dengan produk dan perkhidmatan yang pelbagai termasuk tempat, kontrak, pilihan, dan lain-lain. Dengan pengalaman operasi yang lancar dan integrasi fungsi yang kuat, aplikasi rasminya telah menjadi alat yang sama untuk banyak pengguna aset digital.

Pertama, jalankan Penyelesaian Masalah Windows Update untuk membaiki masalah umum secara automatik, 1. Jalankan Penyelesaian Masalah Kemas Kini Windows; 2. Semak sambungan rangkaian dan tetapan proksi untuk memastikan bahawa anda boleh mengakses pelayan Windows Update; 3. Gunakan arahan DISM untuk membaiki penyimpanan komponen, dan tentukan sumber ISO Windows tempatan jika perlu; 4. Secara manual menentukan laluan sumber ISO apabila memasang fungsi pilihan melalui PowerShell; 5. Tetapkan semula perkhidmatan komponen kemas kini Windows dan cache yang jelas; 6. Jalankan SFC/Scannow dan CHKDSK untuk memeriksa kesilapan sistem dan cakera; Akhirnya pastikan sistem ini dikemas kini kepada ISO rasmi terkini dan menggunakan pertama untuk menyelesaikan masalah fail yang hilang, dan dalam kebanyakan kes, anda boleh berjaya membaiki kesilapan 0x800F0954

OpenVolumemixerbyRight-ClickingThetaskBarspeakericericonSelecting "OpenVolumeMixer" toseeindividualappvolumesliders.2.adjusteachApp'svolumeindependlybydraggingitslider, memastikanTheAppisactifyplayingaDiotoappear.3.alternatio, GotosToStoPare.3.3

Tunggu1-2hoursifdiskactivitycontinues, aswindowssetupmayappearfrozenduringfileexpanionorupdateInstallation.2.RecognInormalslowPhasesLy

macosistargetedlessduetosmallermarketshare, reducingmalwarevolume.2.apple'stighthardware-softwareIntegrationenablesstrongBuilt-InsecurityLikeGatekeeper, SIP, andAppsandboxing.3.Faster, MoreUniformupdaterSability.Fastersability.Faster

Pelayar Blockchain adalah alat yang diperlukan untuk menanyakan maklumat transaksi mata wang digital. Ia menyediakan antara muka visual untuk data blockchain, supaya pengguna dapat menanyakan hash transaksi, ketinggian blok, baki alamat dan maklumat lain; Prinsip kerja termasuk penyegerakan data, parsing, pengindeksan dan paparan antara muka pengguna; Fungsi teras meliputi butiran urus niaga, maklumat blok, baki alamat, data token dan status rangkaian; Apabila menggunakannya, anda perlu mendapatkan TXID dan pilih penyemak imbas blockchain yang sepadan seperti Etherscan atau Blockchain.com untuk mencari; Maklumat alamat pertanyaan untuk melihat sejarah keseimbangan dan transaksi dengan memasukkan alamat; Penyemak imbas arus perdana termasuk bitcoin's blockchain.com, Ethereum's Etherscan.io, b

Toresizetextandapps,right-clickthedesktop,selectDisplaysettings,thenadjusttheScaleoptiontoapresetpercentagelike125%or150%,andsignoutifprompted.2.Tochangeonlytextsize,gotoSettings>Accessibility>Textsizeandusetheslidertoincreasesystemtextwithouta
