1.什麼是對象池(Object Pool) ?
池(Poo), 與集合在某種意義上有些類似。 水池,是必定數量的水的集合;內存池,是必定數量的已經分配好的內存的集合;線程池,是必定數量的已經建立好的線程的集合。那麼,對象池,顧名思義就是必定數量的已經建立好的對象(Object)的集合。性能
2.對象池是幹什麼的?
舉個生活中水池的例子,在沒有水池的時候,每次用水,都要去很遠的地方挑水;有了水池以後的,一次挑不少水來,放在水池蓄下來,這樣之後的一段時間內,用水的時候就不用去挑了,直接從水池取就能夠了。一樣的道理,在C/C++的程序中,若是一種對象,你要常常用malloc/free(或new/delete)來建立、銷燬,這樣子一方面開銷會比較大,另外一方面會產生不少內存碎片,程序跑的時間一長,性能就會降低。這個時候,就產生了對象池。能夠事先建立好一批對象,放在一個集合中,之後每當程序須要新的對象時候,都從對象池裏獲取,每當程序用完該對象後,都把該對象歸還給對象池。這樣,就會少了不少的malloc/free(new/delete)的調用,在必定程度上提升了系統的性能,尤爲在動態內存分配比較頻繁的程序中效果較爲明顯。spa
3.對象池有什麼特徵?
通常來講,對象池有下面幾個特徵:
(1)對象池中有必定數量已經建立好的對象
(2)對象池向用戶提供獲取對象的接口,當用戶須要新的對象時,即可經過調用此接口獲取新的對象。若是對象池中有事先建立好的對象時,就直接返回給用戶;若是沒有了,對象池還能夠建立新的對象加入其中,而後返回給用戶
(3)對象池向用戶提供歸還對象的接口,當用戶再也不使用某對象時,即可經過此接口把該對象歸還給對象池線程
4. 對象池如何實現?對象
只須要提供兩個接口便可,用queue模擬一下。接口