首頁 >後端開發 >Golang >為什麼我的 Cgo 程式碼比預期的 Go 程式碼慢?

為什麼我的 Cgo 程式碼比預期的 Go 程式碼慢?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-02 09:44:10330瀏覽

Why is my Cgo code slower than expected Go code?

為什麼 cgo 這麼慢?

您的測試程式碼比較了 C 和 Go 函數各運行 1 億次的執行時間。 C 函數比 Golang 函數花費更長的時間,您擔心您的測試程式碼有問題。

透過 CGo 呼叫 C/C 程式碼的高開銷使得 CGo 呼叫最小化。在提供的範例中,建立 C 迴圈可能比在循環中重複呼叫 CGo 函數更有效。

Go 運行時的線程設定可以透過多種方式打破C 程式碼的期望:

  1. 相對較小的goroutine 堆疊
  2. 與libpthread 的執行緒本地存儲互動不當實現
  3. 幹擾Go 運行時的UNIX訊號處理程序
  4. 如果 C 程式碼獨佔線程,可能會對其他 goroutine 造成損害

因此,CGo 採取運行的安全方法C 程式碼在具有傳統堆疊的單獨線程中。

與 Python 等語言不同,需要重寫C 中的程式碼熱點對於加速程式來說很常見,而 Go 中 C 和 Go 程式碼之間的效能差距要小得多。考慮保留 CGo 與現有庫的接口,可能使用小型 C 包裝函數來減少 Go 所需的呼叫數量。

以上是為什麼我的 Cgo 程式碼比預期的 Go 程式碼慢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn