0

0

异步在单进程中有那么重要吗?

醉折花枝作酒筹

醉折花枝作酒筹

发布时间:2021-07-16 16:17:16

|

1547人浏览过

|

来源于segmentfault

转载

一般来说,php中的程序是单进程的,执行完一句之后才会再执行下一句。但如果卡在某一个环节,那这个程序就没有办法执行了,我们就需要另一种机制来解决这个问题,这就是异步。

异步在单进程中有那么重要吗?

一般情况下的php中的程序是单进程的,执行完一句再接着下一句(这里不用php的pcntl_fork()系列的函数,我的这种做法比那种好多了),就像一群很有素质的很饿的人(不吃这对饭就可能挂掉,大家都希望尽可能快的吃上这顿饭)排着队去买饭一样,必须一个买完了下一个再买,如果一个人拿了全是1角的零钱,也必须1角1角的数完了才能下一个。

在实际排队买饭中迟一下两下可能没问题,但是要在一个要给用户快速响应的系统中,如果出现这种现象就麻烦了,就像一个完整的登录操作分为好多步骤,要是按部就班的执行,要是卡在一个环节就完蛋了,这个用户就会看到loading按钮一直转啊转的……这个时候就需要一种机制来解决这个问题。

首先我们了解下php的进程间通信扩展,sysvmsg,这里要注意这个扩展只能在linux/uinux中使用,在其他平台无效,我的环境是centos6.3,安装这个扩展很简单:

yum -y install php-process

当然了前提是你已经安装了php,执行完之后在用下面的命令查看是否安装成功:

php -m | grep sysvmsg
#若果看到sysvmsg说明安装成功了

#或者也可以这样
php -r 'var_dump(function_exists("msg_get_queue"))';
#若果看到true说明安装成功了

当然了,上面的命令需要把php路径加入到系统环境变量中。

这个扩展可以在进程间进行通讯,下面来看个例子。

发送,send.php

#!/usr/bin/php
#上面的是我自己的php路径
<?php
$ip = msg_get_queue(12340);
//创建一个队列
msg_send($ip,1,"Test a message",false,false,$err);//像队列中塞一条消息

接受,receive.php

BiLin AI
BiLin AI

免费的多语言AI搜索引擎

下载
#!/usr/bin/php
<?php
$ip = msg_get_queue(12340);
//创建消息队列,和发送的要一致,不然收不到消息
while(msg_receive($ip,0,$msgtype,512,$data,false,null,$err)){
    echo "使用内存: ".memory_get_usage()."\n";
    //这里看下使用了多少内存
    echo "收到的消息: $data\n";
    //收到的消息在这里
}

通过执行程序可以发现,发送消息和接受消息遵循队列的标准FIFO,这样我们根据这些特点就可以设计一个异步的系统。

怎么用这些特性的,这样想想,在程序执行的时候肯定会有很多操作,有些操作是必须时时执行的,而有些操作则是可以有延迟的,更有些操作本来就不重要还会花费很多时间的。

比如说记录登陆日志,记录游戏详细,这个时候我们就可以不必在那里等待程序执行完毕(等的话还会有可能出问题,当不重要操作特别多的时候就会浪费很多时间),而是直接把要操作的东西丢到队列里。

然后在后台单独开启一个进程来执行收到的消息,就像receive.php中一样,一直在那里等待,有消息来的时候他就运行,没有的时候就阻塞,这样是不是就成功解决了程序运行时非马上执行程序浪费时间的问题。

推荐学习:php视频教程

相关文章

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1564

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

716

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

300

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

801

2023.07.05

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

588

2023.07.06

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

570

2023.07.20

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

314

2023.07.20

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

400

2023.07.25

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 2.1万人学习

Swoole系列-从0到1-新手进阶
Swoole系列-从0到1-新手进阶

共29课时 | 1.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号