Go 效能最佳化技巧 5/10

來源:互聯網
上載者:User

標籤:

閉包(closure)也是很常見的編碼模式,因它隱式攜帶上下文環境變數,因此可讓演算法代碼變得更加簡潔。

但任何 “便利” 和 “優雅” 的背後,往往都是更複雜的實現機制,無非是文法糖或編譯器隱藏了相關細節。最終,這些都會變成額外成本在運行期由 CPU、runtime 負擔。甚至因不合理使用,造成效能問題。

用幾個程式碼片段看看可能的麻煩。


單次調用的效能差異有點大(不同環境結果會不同),但這會不會和匿名函數本身構建有關?


似乎是這樣。可接下來的問題就更麻煩了。(代碼僅作示範,並未保證邏輯一致)

首先,閉包引用原環境變數,導致 y 逃逸到堆上,這必然增加了 GC 掃描和回收對象的數量。

接下來,同樣是因為閉包引用原對象,造成資料競爭(data race)。

可見,閉包未必總能將事情 “簡單化”。在學習 Go 底層實現過程中,你會瞭解到,所有 “簡單” 都是由編譯器或運行時用一堆複雜過程堆出來的。

最新動向,請掃碼關注

Go 效能最佳化技巧 5/10

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.