go - `__GI___pthread_mutex_unlock` mengambil sebahagian besar masa pelaksanaan apabila menggunakan cgo

WBOY
Lepaskan: 2024-02-10 09:45:08
ke hadapan
464 orang telah melayarinya

go - 使用 cgo 时,`__GI___pthread_mutex_unlock` 占用大部分执行时间

Editor PHP Zimo mendapati bahawa apabila menggunakan cgo, kadangkala anda akan menghadapi masalah, iaitu, `__GI___pthread_mutex_unlock` mengambil sebahagian besar masa pelaksanaan. Masalah ini boleh menyebabkan kemerosotan prestasi dan menjejaskan kecekapan menjalankan program. Untuk menyelesaikan masalah ini, kita perlu memahami dengan mendalam fungsi dan prinsip `__GI___pthread_mutex_unlock` dan mencari kaedah pengoptimuman yang sepadan. Artikel ini akan memberikan analisis terperinci tentang masalah ini untuk membantu pembaca memahami dan menyelesaikan masalah ini dengan lebih baik.

Kandungan soalan

Saya menggunakan cgo untuk memanggil fungsi c dari go. Terdapat panggilan balik ke fungsi go di dalam fungsi c. Dalam erti kata lain, saya memanggil pergi ->

Selepas menjalankan pprof, saya perasan bahawa __gi___pthread_mutex_unlock mengambil separuh daripada masa pelaksanaan. Afaik, cgo mempunyai overhed, terutamanya panggilan balik dari c ke pergi. Tetapi anehnya, cgo menghabiskan separuh daripada masa pelaksanaannya melakukan beberapa penguncian. Adakah terdapat sesuatu yang salah dengan kod saya?

main.go

65bcae965051

callback.go

65bcae965088

Persekitaran operasi:

lscpu

65bcae965093

go versi bahasa

65bcae9650aa

Ini adalah hasil pprof:

EDIT: Tambahkan persekitaran masa jalan

Penyelesaian

Walaupun saya tidak dapat menghasilkan semula dengan program di atas:

65bceaa20ecf

Tetapi terdapat mutex global untuk setiap panggilan balik, jadi jika anda melakukan panggilan balik selari, anda akan kehilangan prestasi.

Atas ialah kandungan terperinci go - `__GI___pthread_mutex_unlock` mengambil sebahagian besar masa pelaksanaan apabila menggunakan cgo. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!