数码资讯
PHP进程间通信分析
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
本文介绍了在PHP进程间通信的方法,分享给您参考,如下:
PHP单进程单线程处理批处理速度太慢,不太可能,但PHP不能多线程,最后选择多进程批处理任务。
php多进程主要用于进行拆分,然后使用unix/Linux信号进行进程间通信。
这个例子使用:生产者消费者模型=收集器。
< PHP
闪存/全局变量
/ /进程间通信
美元关键= ftok(__file__,);
美元($键)= msg_get_queue队列;
进程
producer_pid = 0美元;
consumers_pid美元=阵();
collector_pid美元= posix_getpid();
消费者闪光
($ i = 0;$ i < 2;$ + +){
consumer_pid美元= pcntl_fork();
如果($ consumer_pid = = 1){
退出()不能叉!;
如果($ consumer_pid){ }
/ / pcntl_wait(美元地位);
回声consumer_pid:consumer_pid美元;
consumers_pid { } = consumer_pid美元美元;
{人}
PID = posix_getpid(美元);
回声consumer_pid:$ PID开始;
当(真){
msg_receive($队列,PID msgtype美元,1024美元,美元,消息);
如果($ =退出){
打破;
}
数据处理
N = intval($消息);
msg_send($队列,collector_pid美元美元美元,N * N);
}
退出(消费者ok!;
}
}
闪光闪光发生器
producer_pid美元= pcntl_fork();
如果($ producer_pid = = 1){
退出()不能叉!;
如果($ producer_pid){ }
/ / pcntl_wait(美元地位);
回声producer_pid:producer_pid美元;
{人}
PID = posix_getpid(美元);
回声producer_pid:$ PID开始;
$ = 0;
($ i = 0;$ i < 10;$ + +){
foreach(consumers_pid美元美元consumer_pid){
美元+;
msg_send($队列,consumer_pid美元,$ N);
}
睡眠(1);
}
foreach(consumers_pid美元美元consumer_pid){
msg_send($队列,consumer_pid美元,退出);
}
睡眠(1);
msg_send($队列,collector_pid美元,退出);
退出()生产者ok!;
}
集电极/闪光
当(真){
msg_receive($队列,collector_pid美元,msgtype美元,1024美元的消息);
如果($ =退出){
打破;
}
回声sprintf(% 5、%d
}
退出(收集器OK)!;
更多有关PHP相关内容的读者可以看到特别站:PHP进程和线程操作技巧总结
希望本文能对PHP程序设计有所帮助。
PHP单进程单线程处理批处理速度太慢,不太可能,但PHP不能多线程,最后选择多进程批处理任务。
php多进程主要用于进行拆分,然后使用unix/Linux信号进行进程间通信。
这个例子使用:生产者消费者模型=收集器。
< PHP
闪存/全局变量
/ /进程间通信
美元关键= ftok(__file__,);
美元($键)= msg_get_queue队列;
进程
producer_pid = 0美元;
consumers_pid美元=阵();
collector_pid美元= posix_getpid();
消费者闪光
($ i = 0;$ i < 2;$ + +){
consumer_pid美元= pcntl_fork();
如果($ consumer_pid = = 1){
退出()不能叉!;
如果($ consumer_pid){ }
/ / pcntl_wait(美元地位);
回声consumer_pid:consumer_pid美元;
consumers_pid { } = consumer_pid美元美元;
{人}
PID = posix_getpid(美元);
回声consumer_pid:$ PID开始;
当(真){
msg_receive($队列,PID msgtype美元,1024美元,美元,消息);
如果($ =退出){
打破;
}
数据处理
N = intval($消息);
msg_send($队列,collector_pid美元美元美元,N * N);
}
退出(消费者ok!;
}
}
闪光闪光发生器
producer_pid美元= pcntl_fork();
如果($ producer_pid = = 1){
退出()不能叉!;
如果($ producer_pid){ }
/ / pcntl_wait(美元地位);
回声producer_pid:producer_pid美元;
{人}
PID = posix_getpid(美元);
回声producer_pid:$ PID开始;
$ = 0;
($ i = 0;$ i < 10;$ + +){
foreach(consumers_pid美元美元consumer_pid){
美元+;
msg_send($队列,consumer_pid美元,$ N);
}
睡眠(1);
}
foreach(consumers_pid美元美元consumer_pid){
msg_send($队列,consumer_pid美元,退出);
}
睡眠(1);
msg_send($队列,collector_pid美元,退出);
退出()生产者ok!;
}
集电极/闪光
当(真){
msg_receive($队列,collector_pid美元,msgtype美元,1024美元的消息);
如果($ =退出){
打破;
}
回声sprintf(% 5、%d
}
退出(收集器OK)!;
更多有关PHP相关内容的读者可以看到特别站:PHP进程和线程操作技巧总结
希望本文能对PHP程序设计有所帮助。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。