swoole 内存会越来越大吗
发布时间 - 2019-12-12 00:00:00 点击率:次
Server内存管理机制
Server启动后内存管理的底层原理与普通php-cli程序一致。具体请参考Zend VM内存管理方面的文章。
局部变量 (推荐学习: swoole视频教程)
在事件回调函数返回后,所有局部对象和变量会全部回收,不需要unset。如果变量是一个资源类型,那么对应的资源也会被PHP底层释放。
function test()
{
$a = new Object;
$b = fopen('/data/t.log', 'r+');
$c = new swoole_client(SWOOLE_SYNC);
$d = new swoole_client(SWOOLE_SYNC);
global $e;
$e['client'] = $d;
}$a, $b, $c 都是局部变量,当此函数return时,这3个变量会立即释放,对应的内存会立即释放,打开的IO资源文件句柄会立即关闭。
$d 也是局部变量,但是return前将它保存到了全局变量$e,所以不会释放。当执行unset($e['client'])时,并且没有任何其他PHP变量仍然在引用$d变量,那么$d就会被释放。
全局变量
在PHP中,有3类全局变量。
使用global关键词声明的变量
使用static关键词声明的类静态变量、函数静态变量
PHP的超全局变量,包括$_GET、$_POST、$GLOBALS等
全局变量和对象,类静态变量,保存在Server对象上的变量不会被释放。需要程序员自行处理这些变量和对象的销毁工作。
class Test
{
static $array = array();
static $string = '';
}
function onReceive($serv, $fd, $reactorId, $data)
{
Test::$array[] = $fd;
Test::$string .= $data;
}在事件回调函数中需要特别注意非局部变量的array类型值,某些操作如 TestClass::$array[] = "string" 可能会造成内存泄漏,严重时可能发生爆内存,必要时应当注意清理大数组。
在事件回调函数中,非局部变量的字符串进行拼接操作是必须小心内存泄漏,如 TestClass::$string .= $data,可能会有内存泄漏,严重时可能发生爆内存。
# swoole
# php
# Static
# String
# Array
# 局部变量
# 全局变量
# 回调函数
# 字符串
# 对象
# 事件
# 关键词
# 回调
# 可能发生
# 都是
# 是一个
# 内存管理
# 就会
# 会有
# 也会
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
浅述节点的创建及常见功能的实现
微信小程序 require机制详解及实例代码
,网页ppt怎么弄成自己的ppt?
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
想要更高端的建设网站,这些原则一定要坚持!
Angular 表单中正确绑定输入值以确保提交与验证正常工作
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
如何在万网利用已有域名快速建站?
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
如何将凡科建站内容保存为本地文件?
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
长沙企业网站制作哪家好,长沙水业集团官方网站?
Android利用动画实现背景逐渐变暗
iOS UIView常见属性方法小结
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
魔毅自助建站系统:模板定制与SEO优化一键生成指南
如何快速生成可下载的建站源码工具?
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
独立制作一个网站多少钱,建立网站需要花多少钱?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
Laravel如何与Inertia.js和Vue/React构建现代单页应用
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
Laravel如何记录自定义日志?(Log频道配置)
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
佛山企业网站制作公司有哪些,沟通100网上服务官网?
如何构建满足综合性能需求的优质建站方案?
如何快速搭建高效可靠的建站解决方案?
HTML 中如何正确使用模板变量为元素的 name 属性赋值
python中快速进行多个字符替换的方法小结
javascript日期怎么处理_如何格式化输出
Swift中swift中的switch 语句
Android滚轮选择时间控件使用详解
如何在腾讯云服务器上快速搭建个人网站?
EditPlus中的正则表达式实战(5)
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
如何在服务器上三步完成建站并提升流量?
Python文件流缓冲机制_IO性能解析【教程】
手机网站制作与建设方案,手机网站如何建设?
高防服务器租用如何选择配置与防御等级?
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】


$b = fopen('/data/t.log', 'r+');
$c = new swoole_client(SWOOLE_SYNC);
$d = new swoole_client(SWOOLE_SYNC);
global $e;
$e['client'] = $d;
}