Pillow 分塊分配程序

2021-07-19 11:27 更新

以前的設計

歷史上 Pillow 中有兩個圖像分配器:? ImagingAllocateBlock? 和? ImagingAllocateArray ?. 第一種方法適用于小于16MB數(shù)據的圖像,并分配一大塊 ?im->linesize * im->ysize ?字節(jié)。第二個用于大圖像,并為每個掃描行的大小進行一次分配? im->linesize ?字節(jié)。這使得在一個分配和可能的數(shù)千個小分配之間實現(xiàn)了一個非常急劇的過渡,從而導致在過渡期間出現(xiàn)不可預測的性能損失。

新設計

?ImagingAllocateArray ?現(xiàn)在將圖像的空間分配為最大大小為16MB的塊鏈。如果存在內存分配錯誤,則返回到分配4KB塊,或至少一條掃描線。這現(xiàn)在是所有內部分配的默認值。

ImagingAllocateBlock 現(xiàn)在只在我們特別請求單個內存段與其他代碼共享時用于這些情況。

內存池

現(xiàn)在有一個內存池來包含最近釋放的塊的供應,然后可以重用這些塊,而不必返回操作系統(tǒng)進行新的分配。默認情況下,當前禁用自由塊的緩存,但可以使用三個環(huán)境變量啟用和調整:

??PILLOW_ALIGNMENT ??,以字節(jié)為單位。指定內存分配的對齊方式。有效值是介于1和128之間(含1和128)的2的冪。默認值為1。

?PILLOW_BLOCK_SIZE ?,以字節(jié)、k或m為單位。指定 ?ImagingAllocateArray ?. 有效值為整數(shù),可選 k 或 m 后綴。默認為16M。

?PILLOW_BLOCKS_MAX ?指定為滿足將來的內存請求而保留的釋放塊數(shù)。超過此閾值的任何釋放塊都將立即返回到操作系統(tǒng)。默認值為0。




以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號