IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

PHP 中关于资源的释放

PHPor 的blog 2011-03-29 00:18:30 累计浏览 2,651 次
本机暂存
问题:
将mysql连接或memcache连接变量直接unset()或赋值为null,连接会立即关闭吗?

测试脚本:
释放资源 test.php
  1.     
    <?php
        
  2.     
    $m = new Memcache();
        
  3.     
    $m->connect("10.55.38.18", 11211);
        
  4.     
    //unset($m);
        
  5.     
    $m = null;
        
  6.     
    sleep(20);
        

执行命令:
strace php test.php
-----------------------------------------------------------
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
fcntl64(3, F_GETFL)                     = 0x2 (flags O_RDWR)
fcntl64(3, F_SETFL, O_RDWR|O_NONBLOCK)  = 0
connect(3, {sa_family=AF_INET, sin_port=htons(11211), sin_addr=inet_addr("10.55.38.18")}, 16) = -1 EINPROGRESS (Operation now in progress)
poll([{fd=3, events=POLLIN|POLLOUT|POLLERR|POLLHUP}], 1, 1000) = 1 ([{fd=3, revents=POLLOUT}])
getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
fcntl64(3, F_SETFL, O_RDWR)             = 0
close(3)                                = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
nanosleep({20, 0}, 0xbfa1e114)  
-------------------------------------------------------------------------

测试结果:
对于一个资源,使用unset()或 设置为null,都会立即关闭连接的。
大概关闭连接的操作是在引用变为0时触发的,具体实现还没看呢。

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 用Hyer来进行网站的抓取 (累计阅读 158,250)
  2. 使用gettext来支持PHP的多语言 (累计阅读 39,267)
  3. MySQL数据库在实际应用一些方面的介绍 (累计阅读 36,397)
  4. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,163)
  5. Mysql监控指南 (累计阅读 21,350)
  6. Paypal接口详细代码(PHP版,非API接口) (累计阅读 19,407)
  7. 由浅入深探究mysql索引结构原理、性能分析与优化 (累计阅读 16,520)
  8. 我的PHP,Python和Ruby之路 (累计阅读 13,146)
  9. 在Apache2.2.XX下安装Mod-myvhost模块 (累计阅读 13,056)
  10. include(“./file.php”)和include(“file.php”)区别 (累计阅读 12,788)