簡體   English   中英

Python 參數傳遞開銷和 object 參考

[英]Python argument passing overhead and object reference

我用 Python 構建了幾個線程服務器項目,同步總是一個令人煩惱的問題。

通常,當工作從一個線程傳遞到另一個線程時,需要從多個線程訪問的數據結構中找到相關的對象和信息。 與鎖等同步是規范的方法,但通常很難確定您的同步實際上是准確的。 這可以通過沿處理管道攜帶相關對象來規避,即使在不需要它們的地方也是如此。

由於這些通常是 object 引用,它會增加多少開銷? 從邏輯上講,它不應該真的如此,這是一種常見的做法嗎?

如果有更多的上下文,這個問題會更容易回答。 但總的來說,在作業負載中傳遞一些 object 引用並沒有明顯的時間成本。 與每個 OS 線程相關的 memory 開銷可能大於線程本地引用消耗的所有 memory。 主要風險是持有不必要的引用會阻止垃圾收集的發生,但如果您將這些對象存儲在全局數據結構中,也會發生這種情況。

與鎖等同步是規范的方法,但通常很難確定您的同步實際上是准確的。

使用鎖通常很容易確保單個數據結構不受數據競爭的影響。 您只需要使用 lock-unlock 調用來包裝每個讀取和寫入操作。 雖然這會降低競爭下的性能,但相比之下,這將使線程本地存儲更快。

只要您不為每個線程都制作大量數據結構的深層副本,就可以了。 通常鼓勵將作業上下文保存在線程本地存儲中,可以在不與其他線程爭用的情況下對其進行訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM