最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

swoole 内存会越来越大吗

来源:懂视网 责编:小采 时间:2020-11-03 18:23:07
文档

swoole 内存会越来越大吗

swoole 内存会越来越大吗:Server内存管理机制Server启动后内存管理的底层原理与普通php-cli程序一致。具体请参考Zend VM内存管理方面的文章。局部变量 (推荐学习: swoole视频教程)在事件回调函数返回后,所有局部对象和变量会全部回收,不需要unset。如果变量是一个资源类型,
推荐度:
导读swoole 内存会越来越大吗:Server内存管理机制Server启动后内存管理的底层原理与普通php-cli程序一致。具体请参考Zend VM内存管理方面的文章。局部变量 (推荐学习: swoole视频教程)在事件回调函数返回后,所有局部对象和变量会全部回收,不需要unset。如果变量是一个资源类型,

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 内存会越来越大吗

swoole 内存会越来越大吗:Server内存管理机制Server启动后内存管理的底层原理与普通php-cli程序一致。具体请参考Zend VM内存管理方面的文章。局部变量 (推荐学习: swoole视频教程)在事件回调函数返回后,所有局部对象和变量会全部回收,不需要unset。如果变量是一个资源类型,
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top