1. 程式人生 > 其它 >HTML5視音訊程式碼例項 & WEBM格式轉換器

HTML5視音訊程式碼例項 & WEBM格式轉換器

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
    gc print(gc.get_threshold()) # (700, 10, 10) 700表示啟動垃圾回收的閾值,後面兩個10分別表示每10次0代垃圾回收,會配合1次1代的垃圾回收;而每10次1代的垃圾回收,才會有1次的2代垃圾回收。

注:垃圾回收時,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