PHP进程通信基础之信号量与共享内存通信_php技巧
这篇文章主要介绍了PHP进程通信基础知识中的信号量与共享内存通信的相关资料,有需要的小伙伴可以查看下
由于进程之间谁先执行并不确定,这取决于内核的进程调度算法,其中比较复杂。由此有可能多进程在相同的时间内同时访问共享内存,从而造成不可预料的错误。信号量这个名字起的令人莫名其妙,但是看其英文原意,就十分容易理解。
semaphore 英[ˈseməfɔ:(r)] vt. 发出信号,打旗语;
类似于指挥官的作用。
下面我们看下一个伪代码信号量的使用。
1、创建信号量唯一标识符
$ftok = ftok(__FILE__, 'a');
2、创建信号量资源ID
$sem_resouce_id = sem_get($ftok);
3、接受信号量
sem_acqure($sem_resource_id);
4、释放信号量
sem_release($sem_resource_id);
5、销毁信号量
sem_remove($sem_resource_id);
举个不文雅的例子,使我们容易理解这个信号量在生活中的用法。理解之后可以套用到我们编程领域。
一家公司只有一个卫生间。那么当有人上厕所的时候,都要获取一把锁(信号量),表示卫生间正在使用。代码如下:
sem_acqure($sem_resource_id);
那么员工上完厕所之后,就需要将锁打开,释放锁(信号量),表示现在可以允许别人使用。代码如下:
sem_release($sem_resource_id);
通过一个简单的锁,我们就能够知道当前的厕所(共享内存)是否可以使用。这个例子不雅观,但说明了问题。这篇博客也是有味道的博客,真是不容易。。。。以下是示例代码:
<?php //创建共享内存区域 $shm_key = ftok(__FILE__, 'a'); $shm_id = shm_attach($shm_key, 1024, 0755); //var_dump($shm_id);die(); resource(4) of type (sysvshm) const SHARE_KEY = 1; $child_list = []; //加入信号量 $sem_id = ftok(__FILE__, 'b'); $signal = sem_get($sem_id); //$signal resource(5) of type (sysvsem) for ($i = 0; $i < 3; $i++) { $pid = pcntl_fork(); if ($pid == -1) { exit("Fork fail!".PHP_EOL); } elseif ($pid == 0) { //获取信号量 sem_acquire($signal); if (shm_has_var($shm_id,SHARE_KEY)) { $count = shm_get_var($shm_id, SHARE_KEY); $count++; //模拟业务处理 $sec = rand(1, 3); sleep($sec); shm_put_var($shm_id, SHARE_KEY, $count); } else { $count = 0; $sec = rand(1, 3); sleep($sec); shm_put_var($shm_id, SHARE_KEY, $count); } echo "child process: ".getmypid()." is writing! now count is: $count ".PHP_EOL; //释放信号量 sem_release($signal); exit("child process".getmypid()."end".PHP_EOL); } else { $child_list[] = $pid; } } while (count($child_list) > 0) { foreach ($child_list as $key => $pid) { $status = pcntl_waitpid($pid, $status); if ($status > 0 || $status == -1) { unset($child_list[$key]); } } sleep(1); } $count = shm_get_var($shm_id, SHARE_KEY); echo " $count ".PHP_EOL; //销毁信号量 sem_remove($signal); shm_remove($shm_id); shm_detach($shm_id);

Alat AI Hot

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

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

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

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)

Topik panas

Rakan yang mengetahui sesuatu tentang komputer mesti tahu bahawa GPU telah berkongsi memori, dan ramai rakan bimbang bahawa memori yang dikongsi akan mengurangkan bilangan memori dan menjejaskan komputer, jadi mereka ingin mematikannya. Berikut ialah cara untuk mematikannya satu pandangan. Matikan memori kongsi win10gpu: Nota: Memori kongsi GPU tidak boleh dimatikan, tetapi nilainya boleh ditetapkan kepada nilai minimum. 1. Tekan DEL untuk memasuki BIOS semasa boot Sesetengah papan induk perlu menekan F2/F9/F12 untuk masuk Terdapat banyak tab di bahagian atas antara muka BIOS, termasuk "Main, Advanced" dan tetapan lain "pilihan. Cari pilihan tetapan SouthBridge dalam antara muka di bawah dan klik Enter untuk masuk.

Sebagai bahasa pengaturcaraan yang sangat serentak, mekanisme coroutine terbina dalam Golang dan operasi berbilang benang membolehkan berbilang tugas yang ringan. Walau bagaimanapun, dalam senario pemprosesan berbilang proses, komunikasi dan memori dikongsi antara proses yang berbeza telah menjadi isu utama dalam pembangunan program. Artikel ini akan memperkenalkan kaedah aplikasi merealisasikan memori dikongsi antara pelbagai proses di Golang. 1. Bagaimana untuk melaksanakan pelbagai proses di Golang Di Golang, pemprosesan serentak pelbagai proses boleh dilaksanakan dalam pelbagai cara, termasuk fork, os.Process,

Penggunaan dan aplikasi fungsi memori kongsi PHP Memori dikongsi merujuk kepada teknologi di mana pelbagai proses mengakses ruang memori yang sama pada masa yang sama. Dalam pengaturcaraan serentak, memori yang dikongsi boleh digunakan untuk komunikasi antara proses untuk mencapai perkongsian data antara proses yang berbeza. PHP juga menyediakan fungsi memori kongsi yang berkaitan Artikel ini akan memperkenalkan penggunaan fungsi memori kongsi PHP dan membincangkan beberapa senario aplikasi praktikal. Penggunaan fungsi memori kongsi PHP menyediakan modul sambungan shmop, yang membolehkan PHP beroperasi pada memori kongsi sistem. Fungsi yang disediakan oleh modul sambungan ini

Dengan perkembangan Internet, semakin banyak laman web perlu membawa sejumlah besar permintaan akses pengguna. Apabila berhadapan dengan konkurensi yang tinggi, pelayan satu proses akan cepat mencapai kesesakan, menyebabkan pengguna tidak dapat mengakses tapak web seperti biasa. Oleh itu, pelbagai proses telah menjadi salah satu penyelesaian yang berkesan untuk menyelesaikan masalah konkurensi yang tinggi. Artikel ini akan memperkenalkan teknologi berbilang proses dalam PHP untuk meningkatkan keupayaan program untuk mengendalikan permintaan serentak sambil memastikan kualiti program. 1. Pengenalan kepada pelbagai proses Dalam sains komputer, proses merujuk kepada contoh program yang melaksanakan. Setiap proses mempunyai ruang memori dan sumber sistem sendiri.

Komunikasi antara proses (IPC) dalam Go dilaksanakan melalui paip, saluran dan memori bersama. Paip membenarkan coroutine menulis dan membaca data melalui titik akhir paip, manakala saluran menjamin keatoman operasi hantar dan terima. Memori yang dikongsi membolehkan pertukaran data pantas dengan membenarkan proses mengakses memori yang sama, tetapi memerlukan penyegerakan untuk menghalang akses serentak.

Dalam C++, memori kongsi dan baris gilir mesej ialah dua kaedah komunikasi antara proses yang biasa digunakan. Mereka boleh membantu kami berkongsi data dan maklumat antara proses yang berbeza, membolehkan pengaturcaraan yang lebih cekap. Memori yang dikongsi ialah kawasan memori khas yang boleh dikongsi oleh pelbagai proses. Menggunakan memori kongsi mengelakkan overhed menyalin data dan mengurangkan kelewatan dalam memindahkan data antara proses. Untuk menggunakan memori kongsi dalam C++, anda perlu memasukkan fail pengepala <sys/shm.h> dan gunakan shmget, shmat, sh

Cara menggunakan modul berbilang pemprosesan untuk komunikasi antara proses dalam Python 3.x Dengan perkembangan teknologi komputer, kita selalunya perlu melaksanakan pelbagai tugas pada masa yang sama dalam pengaturcaraan. Untuk memanfaatkan lebih baik pemproses berbilang teras, modul pemproses berbilang Python menyediakan set alat yang ringkas namun berkuasa untuk mencipta atur cara serentak. Modul multiprocessing membolehkan kami menggunakan pelbagai proses dalam Python, yang boleh dilaksanakan serentak dan berkembang apabila diperlukan.

Pembangunan Golang: Menggunakan RPC untuk mencapai komunikasi silang proses memerlukan contoh kod khusus 1. Pengenalan RPCRPC (RemoteProcedureCall) ialah protokol panggilan prosedur jauh, yang membolehkan pelanggan memanggil fungsi atau kaedah program pelayan yang terletak pada komputer jauh, sama seperti Sama seperti memanggil fungsi tempatan. RPC boleh dilaksanakan menggunakan protokol rangkaian yang berbeza, seperti TCP, HTTP, dll. Dalam sistem teragih, RPC ialah mekanisme komunikasi yang penting, sering digunakan untuk komunikasi merentas proses atau merentasi nod rangkaian.
