HTML5視音訊程式碼例項 & WEBM格式轉換器
阿新 • • 發佈:2022-05-03
1.python多執行緒:
1.1 不是真正的多執行緒
python中存在一個全域性直譯器鎖(GIL),在任意時刻只能由一個執行緒在直譯器中執行。因此Python中的多執行緒是表面上的多執行緒(同一時刻只有一個執行緒),不是真正的多執行緒。
1.2 python多執行緒使用場景:
適用於io密集型程式。可以讓IO堵塞的時間切換到其他執行緒做其他的任務,很適合爬蟲或者檔案的操作。
2.python記憶體管理
2.1.垃圾回收
2.1.1 被回收的物件
當Python執行時,會記錄其中分配物件(object allocation)和取消分配物件(objectdeallocation)的次數。當兩者的差值高於某個閾值時,垃圾回收才會啟動,將沒用的物件(引用計數為0的物件)清除。閾值查詢方法:
import gc print(gc.get_threshold()) # (700, 10, 10) 700表示啟動垃圾回收的閾值,後面兩個10分別表示每10次0代垃圾回收,會配合1次1代的垃圾回收;而每10次1代的垃圾回收,才會有1次的2代垃圾回收。
2.1.2 回收策略-分代回收
- Python將所有的物件分為0,1,2三代;新建的物件為0代物件,經歷過一次垃圾回收倖存下來的物件升級為1代物件。經過兩次及以上次數的回收倖存下的為2代物件。
- 垃圾回收啟動時,一定會掃描所有的0代物件。如果0代經過一定次數垃圾回收,那麼就啟動對0代和1代的掃描清理。當1代也經歷了一定次數的垃圾回收後,那麼會啟動對0,1,2,即對所有物件進行掃描。具體經過多少次啟動下一代物件垃圾回收可通過以下方法查詢
import
注:垃圾回收時,Python不能進行其它的任務,頻繁的垃圾回收將大大降低Python的工作效率;
2.2 記憶體分配:記憶體池
2.2.1 記憶體池
python分為大記憶體和小記憶體。大小以256位元組為界限,大記憶體使用Malloc進行分配,小記憶體則使用記憶體池進行分配。
2.2.2 小整數池
Python實現int的時候有個小整數池。為了避免因建立相同的值而重複申請記憶體空間所帶來的效率問題, Python直譯器會在啟動時創建出小整數池,範圍是[-5,256],該範圍內的小整數物件是全域性直譯器範圍內被重複使用,永遠不會被垃圾回收機制回收。
注:字串也有類似的機制,較為複雜可參考下面部落格
https://www.cnblogs.com/TMesh/p/11731010.html