...
欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 今天我们来探讨一下php-mysql扩展的mysql_connect/mysql_pconnect比较 item mysql_connect mysql_pconnect 函数原型 resource mysql_connect($host_port, $user, $passwd, $newlink, $client_flags);
欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入
今天我们来探讨一下php-mysql扩展的mysql_connect/mysql_pconnect比较
item
|
mysql_connect
|
mysql_pconnect
|
函数原型
|
resource mysql_connect($host_port, $user, $passwd, $newlink, $client_flags);
第四个参数$newlink标记是否创建新的资源对象
|
resource mysql_pconnect($host_port, $user, $passwd, $client_flags);
|
allow_persistent指令
|
设置此指令使得两个函数行为均和mysql_connect()一致
|
连接资源对象获取
|
-
对$host_port, $user, $passwd, $client_flags求哈希值
-
在普通资源列表(EG(regular_list))中查找连接对象(已找到并且没有设置$newlink强制创建新连接)
-
检查找到的对象是否资源类型
-
从查找到的对象中读取连接对象
-
将当前获取的连接对象设置为全局默认连接对象
-
增加连接对象的引用计数, 设置zval属性返回
|
-
对$host_port, $user, $passwd, $client_flags求哈希值
-
从持久化资源列表(EG(persist_list))中查找连接对象(没有找到)
-
检查max_links配置指令限制是否到达
-
检查max_persistent配置指令限制是否到达
-
分配连接对象(php_mysql_conn)空间
-
设置连接对象的基础属性
-
初始化驱动层连接对象(mysqlnd/libmysql两种方式)
-
设置连接超时时间
-
发起驱动层的真实连接请求
-
构造持久化列表元素对象, 将新连接对象设置到元素中
-
将连接对象更新到持久化列表中
-
更新(增加)num_persistent/num_links计数
-
注册资源类型返回值
-
将当前获取的连接设置为全局默认连接对象
|
-
对$host_port, $user, $passwd, $client_flags求哈希值
-
在普通资源列表(EG(regular_list))中查找连接对象(未找到或设置了$newlink强制创建新连接)
-
检查max_links配置指令限制
-
分配连接对象(php_mysql_conn)空间
-
设置连接对象基础属性
-
初始化驱动层连接对象(mysqlnd/libmysql)
-
设置连接超时时间
-
发起驱动层的真实连接
-
将连接对象注册为资源类型返回值
-
将连接对象更新到普通资源列表(EG(regualr_list))中
-
更新num_links计数
-
将当前获取的连接对象设置为全局默认连接对象
|
-
对$host_port, $user, $passwd, $client_flags求哈希值
-
从持久化资源列表中查找连接对象(已找到)
-
检查查找到的持久化资源的类型是否匹配
-
从持久化资源中读取连接对象
-
设置连接对象基本属性
-
检查服务端是否主动关闭
-
如果服务端主动关闭则进行重连
-
注册资源类型返回值
-
将当前获取的连接设置为全局默认连接对象
|
regular_list Vs. persistent_list
|
-
regular_list和persistent_list两者都是HashTable
-
两者都是执行全局环境executor_globals的成员
-
两者生命周期不同, regular_list在php_request_shutdown()时被释放, 也就是单个请求处理完成之后释放, 而persistent_list在php_module_shutdown()的时候调用zend_shutdown()释放, 也就是在整个进程完成执行时释放
|