首页
下载
文档
问答社区
视频
捐赠
源代码
AI 助理
赞助商
CRMEB
Apipost
腾讯云
微擎
禅道
51Talk
商业产品
Swoole AI 智能文档翻译器
Swoole-Compiler PHP 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
关于mysql连接池中resource id的疑问
我在每个worker进程start的时候创建PDO连接,然后使用var_dump打印这个连接资源句柄。代码如下: {{{php public function workStart(\swoole_server $server,$workerId){ //建立mysql连接池,每个worker将会被分配给一个mysql连接 $dsn="mysql:dbname=sp_shop;host=127.0.0.1"; $username='root'; $password='root'; $this->pdo=new \PDO( $dsn, $username, $password, array( \PDO::MYSQL_ATTR_INIT_COMMAND=>"SET NAMES 'UTF8';", \PDO::ATTR_ERRMODE=>\PDO::ERRMODE_EXCEPTION, \PDO::ATTR_PERSISTENT=>true ) ); var_dump($this->pdo); } }}} 我在最后一行var_dump输出这个PDO连接句柄,结果如下(resource id全部为4):这跟我想象中的是不一样的,按照原来的想象,这个resource id应该是不一样的 http头部i4.piimg.com斜杠f01d9aaf17ac1d18.png 然后,我又做了一个简单的实验,代码如下: {{{php for( $i=0; $i<10 ;$i++ ){ $dsn="mysql:dbname=sp_shop;host=127.0.0.1"; $username='root'; $password='root'; $temp=new PDO( $dsn, $username, $password, array( PDO::MYSQL_ATTR_INIT_COMMAND=>"SET NAMES 'UTF8';", PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION, PDO::ATTR_PERSISTENT=>true ) ); var_dump( $temp ); } }}} 这次的结果是这样的( 1 2 1 2 1 2交替 ): http头部i4.piimg.com斜杠164f4fd78020dce8.png
发布于7年前 · 1 次浏览 · 来自
提问
陈
陈喆
我在每个worker进程start的时候创建PDO连接,然后使用var_dump打印这个连接资源句柄。代码如下: {{{php public function workStart(\swoole_server $server,$workerId){ //建立mysql连接池,每个worker将会被分配给一个mysql连接 $dsn="mysql:dbname=sp_shop;host=127.0.0.1"; $username='root'; $password='root'; $this->pdo=new \PDO( $dsn, $username, $password, array( \PDO::MYSQL_ATTR_INIT_COMMAND=>"SET NAMES 'UTF8';", \PDO::ATTR_ERRMODE=>\PDO::ERRMODE_EXCEPTION, \PDO::ATTR_PERSISTENT=>true ) ); var_dump($this->pdo); } }}} 我在最后一行var_dump输出这个PDO连接句柄,结果如下(resource id全部为4):这跟我想象中的是不一样的,按照原来的想象,这个resource id应该是不一样的 http头部i4.piimg.com斜杠f01d9aaf17ac1d18.png 然后,我又做了一个简单的实验,代码如下: {{{php for( $i=0; $i<10 ;$i++ ){ $dsn="mysql:dbname=sp_shop;host=127.0.0.1"; $username='root'; $password='root'; $temp=new PDO( $dsn, $username, $password, array( PDO::MYSQL_ATTR_INIT_COMMAND=>"SET NAMES 'UTF8';", PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION, PDO::ATTR_PERSISTENT=>true ) ); var_dump( $temp ); } }}} 这次的结果是这样的( 1 2 1 2 1 2交替 ): http头部i4.piimg.com斜杠164f4fd78020dce8.png
赞
0
分享
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
评论
2017-08-18
m
mcs
1. 不同的进程fd,本地内存,resource 都是在不同空间的,有隔离。所以resource_id在不同的进程完全没有比较的意义。 2. PHP的resource_id生成规则类似于操作系统文件描述符,对象销毁后resource_id会释放,Zend引擎总是从最小的resource_id开始复用。 3. ( 1 2 1 2 1 2交替 )是因为你的程序根本没有保存$pdo对象,再创建新的对象,旧对象就会销毁。它的resource_id会被下一次new 的对象复用。
赞
0
回复
微信公众号
热门内容
暂无回复的问答
- CodeGalaxy K3s 轻量集群节点之间如何实现负载均衡
- 关于openssl CURL WARNING swSSL_connect: SSL_connect(fd=69) failed. Error: error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small[1|394]
- 多个模型如何进行事务异常回退?
- websocket开启wss报错
- 协程tcp服务器如何使用多进程?recv()方法接收信息,打印出来的pid一直是同一个。没用使用到多进程啊。