回覆列表
  • 1 # 使用者4508581631178

    說說我的理解,之前為了完成一個小工具,因為要呼叫現有的程式,所以在小工具裡不斷的建立程序,多執行緒也經常用,非科班,請大拿指教。程序是執行緒池,每個程序都有自己的虛擬地址空間,程序裡的資源,可以透過這個地址空間來訪問,同一個程序裡的執行緒共享該程序的地址空間,所以,同一程序下的執行緒,資源可以共享。當執行緒退出後,它所分配的資源,如果沒有釋放,也沒把地址告訴其他執行緒,這些資源仍然在它所屬程序的地址空間,只是不知道地址,就無法訪問了,即資源“洩露”了。程序,有父程序和子程序,所有的程序都是init程序的子程序,或者是init程序的子程序的子程序的子程序……,在程序裡可以開程序,但不同程序的地址空間是不同的,所以不同程序不能直接訪問對方的資源,在程序結束後,子程序的資源會被父程序釋放掉,如果父程序先於它死亡,它的資源在退出時會被系統回收,所以,建立執行緒來完成小的任務,不用擔心資源洩露。有人說,那多好啊,我再寫不用來free.delete,每次新開個程序來完成,這裡有個問題,建立程序的開銷會比較大,這很影響速度;此外,程序之間不能直接訪問,小的任務完成,結果要傳回來,可以用套接字,共享記憶體等方法,實現程序間通訊,這一套機制可沒寫幾句記憶體釋放簡單;最後,程序的資源回收,父程序是要管理的,不是父程序建立好程序,子程序退出就自動釋放資源了。綜上,程序是一個執行緒池,同一個程序裡的資源,執行緒可以直接的訪問,程序在資源就一直在。程序可以看成各個不同的池,相互之間要透過媒介才能訪問,程序退出後,資源會被父程序或系統回收。

  • 中秋節和大豐收的關聯?
  • "等待"與"期待"分別用英語怎麼說?