Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan PHP untuk reka bentuk pengaturcaraan serentak

Cara menggunakan PHP untuk reka bentuk pengaturcaraan serentak

WBOY
WBOYasal
2023-06-06 08:01:341685semak imbas

Dengan perkembangan teknologi komputer yang berterusan, cara untuk menggunakan kuasa pemprosesan berbilang teras komputer dengan lebih baik telah menjadi topik hangat. Pengaturcaraan serentak, iaitu kaedah pengaturcaraan yang mengendalikan pelbagai tugas pada masa yang sama, secara beransur-ansur menjadi lebih dan lebih popular. Dalam bidang PHP, cara mereka bentuk pengaturcaraan serentak juga menjadi topik yang sangat membimbangkan. Dalam artikel ini, kami akan memperkenalkan cara mereka bentuk pengaturcaraan serentak menggunakan PHP.

1. Memahami pengaturcaraan pelbagai proses PHP

Dalam bidang PHP, salah satu cara untuk mencapai pengaturcaraan serentak adalah dengan menggunakan pelbagai proses. Pemprosesan berbilang bermaksud menjalankan pelbagai proses untuk menyelesaikan tugasan pada masa yang sama. Apabila melaksanakan pengaturcaraan berbilang proses, anda perlu bergantung pada sokongan berbilang proses yang disediakan oleh sistem pengendalian. Kaedah biasa termasuk fork, exec, popen, dll.

Antaranya, kaedah fork menggunakan mekanisme penyalinan sistem pengendalian untuk mencipta proses baharu yang serupa dan melaksanakan kod yang berbeza dalam proses induk dan proses anak. Kaedah exec menggantikan proses semasa dengan proses anak dan terus melaksanakan kod yang berbeza dalam proses baharu. Kaedah popen membuka proses dan mengembalikan penunjuk fail, yang boleh digunakan untuk membaca atau menulis aliran input dan output proses. Ketiga kaedah di atas semuanya memerlukan sokongan sistem pengendalian dan memerlukan pelarasan yang sesuai dalam sistem pengendalian yang berbeza.

2. Komunikasi antara proses

Dalam pengaturcaraan berbilang proses, komunikasi antara proses adalah penting. Komunikasi antara proses ialah cara pelbagai proses bertukar maklumat. Kaedah komunikasi antara proses yang biasa termasuk paip, baris gilir mesej, memori dikongsi dan semaphore.

Saluran paip ialah kaedah komunikasi antara proses yang paling mudah dan merupakan strim bait sehala. Anda boleh mencipta paip melalui kaedah paip, gunakan kaedah fwrite untuk menulis maklumat ke dalamnya, dan gunakan kaedah fread untuk membaca maklumat daripadanya.

Baris gilir mesej ialah kaedah komunikasi antara proses yang boleh menyelesaikan masalah komunikasi tak segerak antara proses. Gunakan kaedah msg_send untuk menghantar mesej ke baris gilir mesej dan gunakan kaedah msg_receive untuk membaca maklumat daripada baris gilir mesej.

Memori dikongsi ialah cara berkongsi memori antara proses Berbilang proses boleh mengakses kawasan memori yang sama pada masa yang sama. Gunakan kaedah shm_attach untuk melampirkan memori yang dikongsi pada proses semasa, dan gunakan kaedah shm_put_var untuk menulis data, dan kaedah shm_get_var untuk membaca data.

Semaphore ialah kaedah penyegerakan antara proses yang boleh digunakan untuk menyelaraskan urutan pelaksanaan berbilang proses. Gunakan kaedah shm_attach untuk memulakan semaphore, kaedah sem_acquire untuk mengunci semaphore dan kaedah sem_release untuk melepaskan semaphore.

3. Amalan pengaturcaraan serentak berbilang proses PHP

Di bawah ini kami menggunakan contoh mudah untuk memahami cara menggunakan PHP untuk pengaturcaraan serentak berbilang proses. Katakan kita perlu mencari rentetan tertentu dalam fail besar dan mengeluarkan nombor baris dan kandungan di mana rentetan itu muncul. Jika diproses dalam satu utas, ia mungkin mengambil masa yang lama. Pada masa ini, menggunakan pengaturcaraan serentak pelbagai proses boleh memendekkan masa pemprosesan.

Langkah pelaksanaan khusus adalah seperti berikut:

  1. Bahagikan fail besar kepada berbilang fail kecil dan setiap fail kecil diproses melalui proses.
  2. Gunakan baris gilir mesej untuk merekodkan keputusan yang ditemui oleh setiap proses.
  3. Tunggu sehingga tugas setiap proses selesai dan baca hasil pemprosesan daripada baris gilir mesej.
  4. Output hasil pemprosesan kepada output standard.

Kod sampel adalah seperti berikut:

$filename = 'big_file.txt';
$keyword = 'test';

$file = fopen($filename, 'r');
$lineCount = 0;
while(!feof($file)) {
    $line = fgets($file);
    $lineCount++;
    if(strpos($line, $keyword) !== false) {
        $msgQueue = msg_get_queue(1234, 0666);
        msg_send($msgQueue, 2, serialize([$lineCount, $line]), false);
    }
}
fclose ($file);

$numProcesses = 4;
for ($i = 0; $i < $numProcesses; $i++) {
    $pid = pcntl_fork();
    if ($pid == -1) {
        exit("Error forking process");
    } elseif ($pid == 0) {
        $msgQueue = msg_get_queue(1234, 0666);
        while (msg_receive($msgQueue, 2, $msgType, 1024, $data)) {
            list($lineNum, $lineContent) = unserialize($data);
            if ($lineContent) {
                echo "Line $lineNum: $lineContent
";
            }
        }
        exit();
    }
}

while (pcntl_waitpid(0, $status) != -1) {
    $status = pcntl_wexitstatus($status);
}

Dalam contoh di atas, kami membahagikan fail besar kepada 4 fail kecil dan setiap sub-proses bertanggungjawab untuk mencari fail kecil fail. Selepas mencari baris yang mengandungi kata kunci carian, hasil carian dihantar ke proses utama melalui baris gilir mesej. Proses utama menerima hasil carian setiap sub-proses melalui baris gilir mesej dan mengeluarkannya kepada output standard.

4. Ringkasan

Melalui contoh di atas, kita dapat melihat bahawa PHP, sebagai bahasa skrip, juga boleh menyokong pengaturcaraan pelbagai proses dengan baik. Menggunakan PHP untuk reka bentuk pengaturcaraan serentak boleh meningkatkan kecekapan operasi atur cara dan sesuai untuk sesetengah senario yang memerlukan pemprosesan sejumlah besar data pada masa yang sama. Sudah tentu, disebabkan oleh ciri-ciri PHP itu sendiri, terdapat juga beberapa kesukaran dan batasan Sebagai contoh, isu-isu seperti perkongsian pembolehubah dan persaingan sumber dalam PHP memerlukan perhatian khusus. Oleh itu, apabila mereka bentuk pengaturcaraan serentak PHP, adalah perlu untuk mempertimbangkan secara menyeluruh pelbagai faktor dan menjalankan ujian dan penalaan yang mencukupi.

Atas ialah kandungan terperinci Cara menggunakan PHP untuk reka bentuk pengaturcaraan serentak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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