author: selfimpr
blog: http://blog.csdn.net/lgg201
mail: [email protected]
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()釋放,
也就是在整個進程完成執行時釋放
|