Rumah > Artikel > pembangunan bahagian belakang > Melaksanakan multithreading dalam PHP
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!
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>
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
for
循环以在函数内打印 +
符号 50 次。接下来,在 run()
方法之外,编写另一个 for
循环来打印 -
Mula-mula, tulis gelung
+
50 kali di dalam fungsi. Seterusnya, di luar kaedah , tulis gelung run()
方法内的循环在单独的线程中运行,run()
方法外的循环将同时执行。结果,-
和 +
lain yang mencetak simbol
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.
<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>
popen()
Keluaran: <code> <code class="language-text hljs" data-lang="text"><span style="display:flex;"><span>-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ </span></span></code></code>
popen()
Gunakan fungsi
Kita boleh membuka proses selari dalam PHP menggunakan fungsi
. popen()
popen()
函数并创建多个进程来实现多线程。popen()
函数将 command
作为第一个参数,将 mode
Dengan cara ini, kita boleh melaksanakan multi-threading dalam PHP.
r
或 w
Kita boleh mengulangi fungsi
Fungsi mengambil command
sebagai parameter pertama dan mod
sebagai parameter kedua. for
循环。在循环内部,创建另一个循环五次的 for
. $process
来存储 popen()
函数。将 PHP 文件 message.php
和 r
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>
Atas ialah kandungan terperinci Melaksanakan multithreading dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!