Melaksanakan multithreading dalam PHP

WBOY
Lepaskan: 2024-02-28 09:24:01
ke hadapan
854 orang telah melayarinya

Melaksanakan multi-threading dalam PHP sentiasa menjadi topik yang membimbangkan pembangun. Dengan pembangunan berterusan aplikasi Internet, keperluan untuk mengendalikan sejumlah besar permintaan serentak menjadi semakin mendesak. Artikel ini akan memperkenalkan cara melaksanakan berbilang benang dalam PHP, meneroka kelebihan dan senario berbilang benang yang boleh digunakan serta membantu pembangun mengatasi keperluan bersamaan yang kompleks dengan lebih baik. Mari kita lihat dengan lebih mendalam tentang aplikasi multithreading dalam PHP!


Laksanakan multi-threading dalam php menggunakan Parallel selariconcurrency sambungan

Menggunakan sambungan selari selari Parallel kita boleh melaksanakan multi-threading dalam PHP.

Sambungan ini memberikan penjelasan tentang kelas Thread parallelRuntime。我们可以从 parallelRuntime() yang mencipta objek dan dengan itu mencipta thread.

Kelas ini menyediakan kaedah kaedah run(),它安排任务并行运行。我们可以将 Closure 作为参数传递给 run.

Parameter ini biasanya dipanggil task, dan kami juga boleh menentukan array sebagai parameter kedua kaedah. Kandungan tatasusunan dihantar ke tugas.

Terdapat beberapa keperluan sebelum memuat turun sambungan Parallel Parallel Concurrency. Versi PHP hendaklah 8.0 dan Zend Thread Safe (ZTS) harus didayakan.

<pthread.h> 标头是另一个要求。我们可以从 pecl Muat turun sambungan seperti yang ditunjukkan di bawah.

<code>
<code class="language-php hljs" data-lang="php"><span style="display:flex;"><span>pecl install parallel
</span></span></code></code>
Salin selepas log masuk

Kita boleh menggunakan for gelung untuk menguji pelaksanaan selari sesuatu atur cara.

Sebagai contoh, kita boleh menjalankan gelung di dalam kaedah run() dan gelung lain di luar kaedah. Dalam kes ini, pelaksanaan kod akan selari.

Contohnya, cipta objek $rt kelas parallelRuntime dan kemudian gunakan objek itu untuk memanggil kaedah parallelRuntime 类的对象 $rt,然后使用该对象调用 run() 方法。在 run(). Dalam kaedah

, tulis fungsi tanpa nama.

for 循环以在函数内打印 + 符号 50 次。接下来,在 run() 方法之外,编写另一个 for 循环来打印 - Mula-mula, tulis gelung

untuk mencetak simbol + 50 kali di dalam fungsi. Seterusnya, di luar kaedah

, tulis gelung run() 方法内的循环在单独的线程中运行,run() 方法外的循环将同时执行。结果,-+ lain yang mencetak simbol - sebanyak 50 kali.

Memandangkan gelung di dalam kaedah

berjalan dalam benang yang berasingan, gelung di luar kaedah

akan dilaksanakan secara serentak. Akibatnya, simbol - dan + dicetak secara serentak, seperti yang ditunjukkan dalam bahagian output di bawah.

Oleh itu, kita boleh menggunakan sambungan serentak selari untuk melaksanakan multithreading dalam PHP.


Kod contoh:

<code>
<code class="language-php hljs" data-lang="php"><span style="display:flex;"><span><span style="color:#19177c">$rt</span> <span style="color:#666">=</span> <span style="color:#008000;font-weight:bold">new</span> \parallel\Runtime();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#19177c">$rt</span><span style="color:#666">-></span><span style="color:#7d9029">run</span>(<span style="color:#008000;font-weight:bold">funct<strong class="keylink">io</strong>n</span>(){
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">for</span> (<span style="color:#19177c">$i</span> <span style="color:#666">=</span> <span style="color:#666">0</span>; <span style="color:#19177c">$i</span> <span style="color:#666"><</span> <span style="color:#666">50</span>; <span style="color:#19177c">$i</span><span style="color:#666">++</span>)
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">echo</span> <span style="color:#ba2121">"+"</span>;
</span></span><span style="display:flex;"><span>});
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">for</span> (<span style="color:#19177c">$i</span> <span style="color:#666">=</span> <span style="color:#666">0</span>; <span style="color:#19177c">$i</span> <span style="color:#666"><</span> <span style="color:#666">50</span>; <span style="color:#19177c">$i</span><span style="color:#666">++</span>) {
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">echo</span> <span style="color:#ba2121">"-"</span>;
</span></span><span style="display:flex;"><span>}
</span></span></code></code>
Salin selepas log masuk
popen() Keluaran:

<code>
<code class="language-text hljs" data-lang="text"><span style="display:flex;"><span>-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</span></span></code></code>
Salin selepas log masuk

popen() Gunakan fungsi

untuk melaksanakan multi-threading dalam PHP

Kita boleh membuka proses selari dalam PHP menggunakan fungsi

. popen()

Fungsi ini memisahkan proses untuk mencapai pemprosesan selari. Proses tidak berkongsi sumber.

popen() 函数并创建多个进程来实现多线程。popen() 函数将 command 作为第一个参数,将 mode Dengan cara ini, kita boleh melaksanakan multi-threading dalam PHP.

Fungsi mencipta paip ke proses bercabang.

rw Kita boleh mengulangi fungsi

dan mencipta berbilang proses untuk mencapai berbilang benang.

Fungsi mengambil command sebagai parameter pertama dan mod sebagai parameter kedua. for 循环。在循环内部,创建另一个循环五次的 for

Mod boleh

. $process 来存储 popen() 函数。将 PHP 文件 message.phpr

Contohnya, buat gelung

yang gelung lima kali. Di dalam gelung, cipta satu lagi gelung pclose() 函数关闭 $process yang gelung lima kali.

Di dalam gelung kecil, cipta tatasusunan $process untuk menyimpan fungsi pclose(). Tetapkan mod message.php dan r fail PHP sebagai parameter pertama dan kedua.

Seterusnya, buat subgelung lain dan gunakan popen().

Di sini, lima proses dilaksanakan secara selari dalam gelung kecil pertama. Proses ini ditamatkan dalam gelung kecil kedua menggunakan fungsi

. 🎜 🎜 Beginilah cara kami melaksanakan multithreading menggunakan fungsi 🎜 dalam PHP. 🎜 🎜 Kod contoh: 🎜
<code>
<code class="language-php hljs" data-lang="php"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">for</span> (<span style="color:#19177c">$i</span><span style="color:#666">=</span><span style="color:#666">0</span>; <span style="color:#19177c">$i</span><span style="color:#666"><</span><span style="color:#666">5</span>; <span style="color:#19177c">$i</span><span style="color:#666">++</span>) {
</span></span><span style="display:flex;"><span> 
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">for</span> (<span style="color:#19177c">$j</span><span style="color:#666">=</span><span style="color:#666">0</span>; <span style="color:#19177c">$j</span><span style="color:#666"><</span><span style="color:#666">5</span>; <span style="color:#19177c">$j</span><span style="color:#666">++</span>) {
</span></span><span style="display:flex;"><span> <span style="color:#19177c">$process</span>[<span style="color:#19177c">$j</span>] <span style="color:#666">=</span> popen(<span style="color:#ba2121">'message.php'</span>, <span style="color:#ba2121">'r'</span>);
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">for</span> (<span style="color:#19177c">$j</span><span style="color:#666">=</span><span style="color:#666">0</span>; <span style="color:#19177c">$j</span><span style="color:#666"><</span><span style="color:#666">5</span>; <span style="color:#666">++</span><span style="color:#19177c">$j</span>) {
</span></span><span style="display:flex;"><span> pclose(<span style="color:#19177c">$process</span>[<span style="color:#19177c">$j</span>]);
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span>}
</span></span></code></code>
Salin selepas log masuk

Atas ialah kandungan terperinci Melaksanakan multithreading dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:lsjlt.com
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!