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.
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
callback.go
Persekitaran operasi:
lscpu
go versi bahasa
65bcae9650aaIni adalah hasil pprof:
EDIT: Tambahkan persekitaran masa jalan
Walaupun saya tidak dapat menghasilkan semula dengan program di atas:
65bceaa20ecfTetapi 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!