發布時間: 2023-07-24 16:30:15
池化技術能夠減少資源對象的創建次數,提?程序的響應性能,特別是在?并發下這種提?更加明顯。使用池化技術緩存的資源對象有如下共同特點:
1. 對象創建時間長;
2. 對象創建需要大量資源;
3. 對象創建后可被重復使用像常見的線程池、內存池、連接池、對象池都具有以上的共同特點。
什么是數據庫連接池
定義:數據庫連接池(Connection pooling)是程序啟動時建立足夠的數據庫連接,并將這些連接組成一個連接池,由程序動態地對池中的連接進行申請,使用,釋放。
大白話:創建數據庫連接是?個很耗時的操作,也容易對數據庫造成安全隱患。所以,在程序初始化的時候,集中創建多個數據庫連接,并把他們集中管理,供程序使用,可以保證較快的數據庫讀寫速度,還更加安全可靠。這里講的數據庫,不單只是指Mysql,也同樣適用于Redis。
為什么使用數據庫連接池
1. 資源復用:由于數據庫連接得到復用,避免了頻繁的創建、釋放連接引起的性能開銷,在減少系統消耗的基礎上,另一方面也增進了系統運行環境的平穩性(減少內存碎片以及數據庫臨時進程/線程的數量)。
2. 更快的系統響應速度:數據庫連接池在初始化過程中,往往已經創建了若干數據庫連接置于池中備用。此時連接的初始化工作均已完成。對于業務請求處理而言,直接利用現有可用連接,避免了從數據庫連接初始化和釋放過程的開銷,從而縮減了系統整體響應時間。
3. 統?的連接管理:避免數據庫連接泄露,在較為完備的數據庫連接池實現中,可根據預先的連接占用超時設定,強制收回被占用連接。從而避免了常規數據庫連接操作中可能出現的資源泄露。
如果不使用連接池
1. TCP建立連接的三次握手(客戶端與MySQL服務器的連接基于TCP協議)
2. MySQL認證的三次握手
3. 真正的SQL執行
4. MySQL的關閉
5. TCP的四次握手關閉
可以看到,為了執行?條SQL,需要進行TCP三次握手,Mysql認證、Mysql關閉、TCP四次揮手等其他操作,執行SQL操作在所有的操作占比非常低。
?
優點:實現簡單
缺點:
· 網絡IO較多
· 帶寬利用率低
· QPS較低
· 應用頻繁低創建連接和關閉連接,導致臨時對象較多,帶來更多的內存碎片
· 在關閉連接后,會出現大量TIME_WAIT 的TCP狀態(在2個MSL之后關閉)
長連接和連接池的區別
· 長連接是?些驅動、驅動框架、ORM工具的特性,由驅動來保持連接句柄的打開,以便后續的數據庫操作可以重用連接,從而減少數據庫的連接開銷。
· 而連接池是應用服務器的組件,它可以通過參數來配置連接數、連接檢測、連接的生命周期等。
· 連接池內的連接,其實就是長連接。
為什么要用內存池:
1. 在需要堆內存管理一些數據的時候直接malloc,容易造成內存碎片
2. 在需要堆內存管理一些數據的時候直接malloc,容易忘記free,造成內存泄漏,利于內存管理
異步請求要點:
1. 請求方作為客戶端請求后(send/sendto),把fd交給epoll管理,不等待結果返回(recv/recvfrom)。
2. epoll_wait在一個線程死循環中,當epoll收到消息,在進行處理(recv/recvfrom)。
上一篇: 了解華為云OBS對象儲存,讓你的數據管理變得更加簡單
下一篇: 網工路由基礎知識:IS-IS協議