小菜一碟
阿新 • • 發佈:2018-11-22
1. python下多執行緒的限制以及多程序中傳遞引數的方式: python的多執行緒是無法發揮多核優勢的,限制就是GIL,在同一時間同一時刻同一程序中只有一個執行緒被執行。 執行緒搶的是GIL鎖,GIL鎖相當於執行許可權,拿到執行許可權後才能拿到互斥鎖Lock, 其他執行緒也可以搶到GIL,但如果發現Lock仍然沒有被釋放則阻塞, 即便是拿到執行許可權GIL也要立刻交出來 多程序引數傳遞可以通過管道,佇列。 from multiprocessing import Process,Queue
(2)python多執行緒與多程序的區別:
補充:執行緒互動也可以使用佇列,還有Event,其他見隨筆
殭屍程序:一個程序使用fork建立子程序,如果子程序退出,而父程序並沒有呼叫wait或waitpid獲取子程序的狀態資訊,那麼子程序的程序描述符仍然儲存在系統中。
這種程序稱之為僵死程序。主要是佔用了程序號,不釋放,所以有害
孤兒程序:一個父程序退出,而它的一個或多個子程序還在執行,那麼那些子程序將成為孤兒程序。
孤兒程序將被init程序(程序號為1)所收養,並由init程序對它們完成狀態收集工作。
2.Python是如何進行記憶體管理的?
小物件在記憶體池中申請釋放,大物件用malloc/new
Python引用了一個記憶體池(memory pool)機制,即Pymalloc機制(malloc:n.分配記憶體),用於管理對小塊記憶體的申請和釋放
記憶體池(memory pool)的概念:
當 建立大量消耗小記憶體的物件時,頻繁呼叫new/malloc會導致大量的記憶體碎片,致使效率降低。
記憶體池的概念就是預先在記憶體中申請一定數量的,大小相等 的記憶體塊留作備用,當有新的記憶體需求時,就先從記憶體池中分配記憶體給這個需求,
不夠了之後再申請新的記憶體。這樣做最顯著的優勢就是能夠減少記憶體碎片,提升效率。
記憶體池的實現方式有很多,效能和適用範圍也不一樣。
python中的記憶體管理機制——Pymalloc:
python中的記憶體管理機制都有兩套實現,一套是針對小物件,就是大小小於256bits時,pymalloc會在記憶體池中申請記憶體空間;
當大於256bits,則會直接執行new/malloc的行為來申請記憶體空間。
關於釋放記憶體方面,當一個物件的引用計數變為0時,python就會呼叫它的解構函式。
在析構時,也採用了記憶體池機制,從記憶體池來的記憶體會被歸還到記憶體池中,以避免頻繁地釋放動作。
4.如何用Python輸出一個Fibonacci數列?