Rumah >pembangunan bahagian belakang >Golang >Mengapa kod Cgo saya lebih perlahan daripada kod Go yang dijangkakan?

Mengapa kod Cgo saya lebih perlahan daripada kod Go yang dijangkakan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-02 09:44:10333semak imbas

Why is my Cgo code slower than expected Go code?

Mengapa cgo sangat perlahan?

Kod ujian anda membandingkan masa pelaksanaan fungsi C dan Go dijalankan 100 juta kali setiap satu. Fungsi C mengambil masa lebih lama daripada fungsi Golang dan anda bimbang ada sesuatu yang tidak kena dengan kod ujian anda.

Overhed tinggi untuk memanggil kod C/C melalui CGo menjadikan panggilan CGo diminimumkan dengan sebaiknya. Dalam contoh yang diberikan, mungkin lebih cekap untuk membuat gelung C dan bukannya memanggil fungsi CGo berulang kali dalam gelung.

Persediaan masa jalan Go untuk urutannya boleh memecahkan jangkaan kod C dalam beberapa cara:

  1. Timbunan goroutine yang agak kecil
  2. Interaksi yang tidak betul dengan libpthread pelaksanaan storan tempatan benang
  3. Gangguan dengan pengendali isyarat UNIX masa jalanan Go
  4. Potensi memudaratkan goroutine lain jika kod C memonopoli utas

Oleh itu, CGo mengambil peti keselamatan pendekatan menjalankan kod C dalam urutan berasingan dengan tindanan tradisional.

Tidak seperti bahasa seperti Python yang menulis semula hotspot kod dalam C adalah perkara biasa untuk mempercepatkan atur cara, jurang prestasi Go antara kod C dan Go jauh lebih kecil. Pertimbangkan untuk menempah CGo untuk antara muka dengan perpustakaan sedia ada, mungkin dengan fungsi pembalut C kecil untuk mengurangkan bilangan panggilan yang diperlukan daripada Go.

Atas ialah kandungan terperinci Mengapa kod Cgo saya lebih perlahan daripada kod Go yang dijangkakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn