基于C++研究高并發(fā)內(nèi)存池
訪問【W(wǎng)RITE-BUG數(shù)字空間】_[內(nèi)附完整源碼和文檔]
內(nèi)存池:程序預(yù)先向系統(tǒng)申請(qǐng)一大塊足夠的內(nèi)存,此后,當(dāng)系統(tǒng)需要申請(qǐng)內(nèi)存的時(shí)候,不是直接向操作習(xí)題申請(qǐng),而是向內(nèi)存池中申請(qǐng),當(dāng)釋放的時(shí)候,不返回給操作系統(tǒng),而是返回給內(nèi)存池,當(dāng)程序退出時(shí),內(nèi)存池才將申請(qǐng)的內(nèi)存真正釋放
高并發(fā)內(nèi)存池
借鑒tcmalloc(ThreadCaching Malloc),即線程緩存的malloc,實(shí)現(xiàn)了高效的多線程內(nèi)存管理,用于替代系統(tǒng)的內(nèi)存分配相關(guān)的函數(shù)(malloc,free)
池化技術(shù):向系統(tǒng)先申請(qǐng)過量的資源,然后自己管理,以備不時(shí)之需,之所以申請(qǐng)過量資源,是因?yàn)槊看紊暾?qǐng)資源都有較大的開銷,那邊不如提前申請(qǐng)好,提高程序運(yùn)行效率
在計(jì)算機(jī)中除了內(nèi)存池,還有連接池,線程池,對(duì)象池等,以線程池為例,它的主要思想是,先啟動(dòng)若干數(shù)量的線程,讓他們處于睡眠狀態(tài),當(dāng)接收到客戶端請(qǐng)求時(shí),喚醒某個(gè)沉睡的線程,讓它處理客戶端請(qǐng)求,當(dāng)處理完請(qǐng)求之后,線程又進(jìn)入了休眠狀態(tài)
內(nèi)存池:程序預(yù)先向系統(tǒng)申請(qǐng)一大塊足夠的內(nèi)存,此后,當(dāng)系統(tǒng)需要申請(qǐng)內(nèi)存的時(shí)候,不是直接向操作習(xí)題申請(qǐng),而是向內(nèi)存池中申請(qǐng),當(dāng)釋放的時(shí)候,不返回給操作系統(tǒng),而是返回給內(nèi)存池,當(dāng)程序退出時(shí),內(nèi)存池才將申請(qǐng)的內(nèi)存真正釋放
內(nèi)存池解決問題:
1.主要解決效率問題
2.內(nèi)存碎片問題
malloc實(shí)際就是一個(gè)內(nèi)存池
定長內(nèi)存池
固定大小的內(nèi)存申請(qǐng)管理
特定:
性能達(dá)到極致
不考慮內(nèi)存碎片等問題
設(shè)計(jì)方式:
向內(nèi)存申請(qǐng)一塊足夠大的內(nèi)存塊,然后每次申請(qǐng)內(nèi)存時(shí)我們就切出去一小部分拿來使用,



