在實務上,一般我們將 resource leak 分成兩大類,一種是程式執行一次,僅會發生一次的 leak,另一種則會隨著每次運算而屢次發生的 leak。今天我突發奇想,這兩者,是否可稱之為「fixed leak」與「marginal leak」?

在經濟學裡,「邊際成本 (marginal cost)」指會隨著每單位生產的新產品而增加的成本,例如製作每個麵包,所需要之麵粉的購買成本。Wikipedia 如是說

在經濟學和金融學中,邊際成本指的是每一單位新增生產的產品(或者購買的產品)帶來到總成本的增量。

與之相對的則是「固定成本 (fixed cost)」,不會隨著業務量而變化的成本,如烘培麵包所需之烤爐的購置成本。

而當在寫程式的時候,可能會碰到的 resource leak,其行為也可以分成兩大類:程式執行一次,不管做了多少事,固定會洩漏一定量的 leak,以及隨著做的事情越多,洩漏的量越多的 leak。

套用經濟學的概念,我在想,其實可以把上面這兩大類 resource leak,稱呼為:

  • fixed leak:程式執行一次,不管做了多少事,固定會洩漏一定量的 leak;
  • marginal leak:隨著做的事情越多,洩漏的量越多的 leak。

其中,marginal leak 較為嚴重,會隨著程式執行越久,吃掉越多的資源,最後導致資源不足,使程式當掉,甚至當掉整台電腦。

而 fixed leak 問題較小,若時程不夠,通常我們會忽略之。不過要小心的就是,若程式支援某種 reset 機制,如某些 server 收到 SIGHUP 會重讀設定檔,則可能某些 fixed leak 會現出真面目,其實是 marginal leak,會隨著 reset 而增加洩漏的量。

好奇,用加雙引號的 "marginal leak" 查了一下 google,發現只有 160 筆。區分這兩種 leak,一般都是用什麼專有名詞啊?