這個(gè)c3p0連接池起到一個(gè)什么作用?為什么后端框架里要用連接池而不是直接去鏈接數(shù)據(jù)庫呢,?而連接池中的私有屬性誰能幫忙具體解釋一下。。。謝謝啦。。。
2 回答
已采納

yanrun
TA貢獻(xiàn)317條經(jīng)驗(yàn) 獲得超240個(gè)贊
這種連接“匯集”起來的技術(shù)基于這樣的一個(gè)事實(shí):對于大多數(shù)應(yīng)用程序,當(dāng)它們正在處理通常需要數(shù)毫秒完成的事務(wù)時(shí),僅需要能夠訪問JDBC連接的?1?個(gè)線程。當(dāng)不處理事務(wù)時(shí),這個(gè)連接就會閑置。相反,連接池允許閑置的連接被其它需要的線程使用。 事實(shí)上,當(dāng)一個(gè)線程需要用?JDBC?對一個(gè)?GBase?或其它數(shù)據(jù)庫操作時(shí),它從池中請求一個(gè)連接。當(dāng)這個(gè)線程使用完了這個(gè)連接,將它返回到連接池中,這樣這就可以被其它想使用它的線程使用。 當(dāng)連接從池中“借出”,它被請求它的線程專有地使用。從編程的角度來看,這和用戶的線程每當(dāng)需要一個(gè)?JDBC?連接的時(shí)候調(diào)用DriverManager.getConnection()?是一樣的,采用連接池技術(shù),可通過使用新的或已有的連接結(jié)束線程。 連接池可以極大的改善用戶的?Java?應(yīng)用程序的性能,同時(shí)減少全部資源的使用。連接池主要的優(yōu)點(diǎn)有: 減少連接創(chuàng)建時(shí)間 雖然與其它數(shù)據(jù)庫相比?GBase?提供了較為快速連接功能,但是創(chuàng)建新的?JDBC?連接仍會招致網(wǎng)絡(luò)和?JDBC?驅(qū)動的開銷。如果這類連接是“循環(huán)”使用的,使用該方式這些花銷就可避免。 簡化的編程模式 當(dāng)使用連接池時(shí),每一個(gè)單獨(dú)的線程能夠像創(chuàng)建了一個(gè)自己的?JDBC?連接一樣操作,允許用戶直接使用JDBC編程技術(shù)。 受控的資源使用 如果用戶不使用連接池,而是每當(dāng)線程需要時(shí)創(chuàng)建一個(gè)新的連接,那么用戶的應(yīng)用程序的資源使用會產(chǎn)生非常大的浪費(fèi)并且可能會導(dǎo)致高負(fù)載下的異常發(fā)生。 注意,每個(gè)連到?GBase?的連接在客戶端和服務(wù)器端都有花銷(內(nèi)存,CPU,上下文切換等等)。每個(gè)連接均會對應(yīng)用程序和?GBase?服務(wù)器的可用資源帶來一定的限制。不管這些連接是否在做有用的工作,仍將使用這些資源中的相當(dāng)一部分。 連接池能夠使性能最大化,同時(shí)還能將資源利用控制在一定的水平之下,如果超過該水平,應(yīng)用程序?qū)⒈罎⒍粌H僅是變慢。
來自百度百科

小鑫窩_2020
TA貢獻(xiàn)7條經(jīng)驗(yàn) 獲得超8個(gè)贊
使用連接池是因?yàn)?
每次都新建一個(gè)Connection對象很耗時(shí),因?yàn)榻⒁粋€(gè)socket通信,建完之后close又很浪費(fèi)。?
添加回答
舉報(bào)
0/150
提交
取消