php-mysql擴展的mysql_connect/mysql_pconnect比較

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()一致

連接資源對象獲取

  1. $host_port, $user, $passwd, $client_flags求哈希值
  2. 在普通資源列表(EG(regular_list))中查找連接對象(已找到並且沒有設置$newlink強制創建新連接)
  3. 檢查找到的對象是否資源類型
  4. 從查找到的對象中讀取連接對象
  5. 將當前獲取的連接對象設置爲全局默認連接對象
  6. 增加連接對象的引用計數, 設置zval屬性返回
  1. $host_port, $user, $passwd, $client_flags求哈希值
  2. 從持久化資源列表(EG(persist_list))中查找連接對象(沒有找到)
  3. 檢查max_links配置指令限制是否到達
  4. 檢查max_persistent配置指令限制是否到達
  5. 分配連接對象(php_mysql_conn)空間
  6. 設置連接對象的基礎屬性
  7. 初始化驅動層連接對象(mysqlnd/libmysql兩種方式)
  8. 設置連接超時時間
  9. 發起驅動層的真實連接請求
  10. 構造持久化列表元素對象, 將新連接對象設置到元素中
  11. 將連接對象更新到持久化列表中
  12. 更新(增加)num_persistent/num_links計數
  13. 註冊資源類型返回值
  14. 將當前獲取的連接設置爲全局默認連接對象
  1. $host_port, $user, $passwd, $client_flags求哈希值
  2. 在普通資源列表(EG(regular_list))中查找連接對象(未找到或設置了$newlink強制創建新連接)
  3. 檢查max_links配置指令限制
  4. 分配連接對象(php_mysql_conn)空間
  5. 設置連接對象基礎屬性
  6. 初始化驅動層連接對象(mysqlnd/libmysql)
  7. 設置連接超時時間
  8. 發起驅動層的真實連接
  9. 將連接對象註冊爲資源類型返回值
  10. 將連接對象更新到普通資源列表(EG(regualr_list))
  11. 更新num_links計數
  12. 將當前獲取的連接對象設置爲全局默認連接對象
  1. $host_port, $user, $passwd, $client_flags求哈希值
  2. 從持久化資源列表中查找連接對象(已找到)
  3. 檢查查找到的持久化資源的類型是否匹配
  4. 從持久化資源中讀取連接對象
  5. 設置連接對象基本屬性
  6. 檢查服務端是否主動關閉
  7. 如果服務端主動關閉則進行重連
  8. 註冊資源類型返回值
  9. 將當前獲取的連接設置爲全局默認連接對象

regular_list Vs. persistent_list

  1. regular_listpersistent_list兩者都是HashTable
  2. 兩者都是執行全局環境executor_globals的成員
  3. 兩者生命週期不同, regular_listphp_request_shutdown()時被釋放, 也就是單個請求處理完成之後釋放, persistent_listphp_module_shutdown()的時候調用zend_shutdown()釋放, 也就是在整個進程完成執行時釋放




發佈了123 篇原創文章 · 獲贊 1149 · 訪問量 130萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章