Rumah  >  Artikel  >  pembangunan bahagian belakang  >  go - `__GI___pthread_mutex_unlock` mengambil sebahagian besar masa pelaksanaan apabila menggunakan cgo

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

WBOY
WBOYke hadapan
2024-02-10 09:45:08463semak imbas

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam