27 sebab mengapa Goroutine hang

Lepaskan: 2023-08-08 16:25:34
ke hadapan
763 orang telah melayarinya

Artikel hari ini akan berkongsi dengan anda 27 punca gopark. Untuk kemudahan membaca, kami akan menerangkan mengikut kategori. .
waitReasonGCAssistMarking

GC assist markingwaitReasonIOWait

IO tunggu
  • waitReasonZero: Tiada penjelasan rasmi, berdasarkan penggunaan. Terutamanya digunakan dalam dua senario: tidur dan kunci.
  • waitReasonGCAssistMarking: Fasa penandaan tambahan GC akan menyebabkan menunggu terhalang.
  • waitReasonIOTunggu: Apabila IO disekat dan menunggu, contohnya: permintaan rangkaian, dsb. . nil chan)

waitReasonChanSendNilChanchan hantar (nil chan)

  • waitReasonChanReceiveNilChan: Baca operasi pada saluran yang tidak dimulakan.
  • waitReasonChanSendNilChan: Tulis operasi ke saluran yang tidak dimulakan. . imbasan kutipan sampah

  • waitReasonDumpingHeap: Apabila membuang timbunan Go Heap, senario penggunaan ini hanya disekat semasa runtime.debug, iaitu jenis koleksi pprof biasa.
  • waitReasonGarbageCollection: Dicetuskan semasa kutipan sampah, senario utama ialah fasa Penamatan GC Mark.
  • waitReasonGarbageCollectionScan: Semasa pengimbasan kutipan sampah, senario utama dicetuskan apabila tanda GC (GC Mark) mengimbas peringkat Root. .

waitReasonSelectselect

waitReasonSelectNoCasesselect (tiada kes )
  • waitReasonPanicTunggu: Dicetuskan apabila panik berlaku dalam goroutine utama.
  • waitReasonSelect: Dicetuskan apabila memanggil kata kunci pilih.
  • waitReasonSelectNoCases: Apabila memanggil kata kunci pilih, jika tiada kes, ia akan dicetuskan secara langsung. .

tungguReasonGCScavengeWaitGC sapu tunggu

tungguReasonGCScavengeWait GC mengais tunggu
  • waitReasonGCAssistWait: Gelagat tamat dalam fasa tanda tambahan GC akan dicetuskan.
  • waitReasonGCSweepWait: Gelagat tamat dalam fasa sapuan GC akan dicetuskan.
  • waitReasonGCScavengeWait: Gelagat akhir fasa GC scavenge akan dicetuskan. GC Scavenge terutamanya pengumpulan sampah ruang baharu Ia adalah GC yang kerap berjalan dan pantas yang bertanggungjawab untuk membersihkan objek yang lebih kecil dari ruang baharu. .
tungguReasonChanSend

chan hantar

tungguReasonFinalizerTunggu
finalizer tunggu
  • waitReasonChanReceive: Operasi baca pada saluran akan dicetuskan.
  • waitReasonChanSend: Dicetuskan apabila menulis dalam saluran.
  • waitReasonFinalizerWait: akan dicetuskan apabila finalizer tamat. Dalam program Go, anda boleh menetapkan fungsi finalizer untuk objek dengan memanggil fungsi runtime.SetFinalizer. Tingkah laku ini sepadan dengan kitar semula yang disebabkan oleh fasa akhir. .

waitReasonSemacquiresemacquire

waitReasonSleep
tidur
  • waitReasonForceGCIdle: Dicetuskan apabila GC paksa (masa melahu) tamat.
  • waitReasonSemacquire: Dicetuskan apabila pemprosesan semaphore tamat.
  • waitReasonSleep: tingkah laku tidur klasik, akan dicetuskan. . ia

waitReasonTimerGoroutineIdle goroutine pemasa (terbiar)

waitReasonTraceReaderDisekatpembaca jejak (disekat)
  • waitReasonSyncCondWait: Dicetuskan apabila digabungkan dengan kaedah sync.Cond 用法能知道,是在调用 sync.Wait.
  • waitReasonTimerGoroutineIdle: berkaitan dengan Pemasa, ia akan dicetuskan apabila tiada pemasa untuk melaksanakan tugas.
  • waitReasonTraceReaderBlocked: Berkaitan dengan Trace, ReadTrace akan mengembalikan data surih binari dan akan menyekat sehingga data tersedia. . kitaran

tungguReasonGCWorkerIdlePekerja GC (terbiar)

tungguReasonPreempted dipreempteddebug call
waitReasonDebugCall
  • waitReasonWaitForGCCycle: Menunggu kitaran GC, ia akan tidur dan menyebabkan tersumbat.
  • waitReasonGCWorkerIdle: Apabila Pekerja GC melahu, ia akan tidur dan menyebabkan terhalang.
  • waitReasonPreempted: Apabila preemption panggilan kitaran berlaku, ia akan tidur dan menunggu penjadualan.
  • waitReasonDebugCall: Dicetuskan apabila GODEBUG dipanggil.

Ringkasan

Artikel hari ini adalah tambahan kepada penjelasan terperinci tentang fungsi runtime.gopark pada mulanya.

Adegan utama ialah:

  1. Saluran.
  2. Kutipan Sampah (GC).
  3. Tidur.
  4. Kunci menunggu.
  5. Didahulukan.
  6. IO menyekat (IO Tunggu)
  7. Lain-lain, seperti: panik, pemuktamad, pilih, dsb.

Kita boleh menggunakan ciri-ciri ini untuk membongkar sebab-sebab yang boleh menyebabkan penyumbatan. Malah, tidak perlu diingati mereka akan menyebabkan sekatan kerana ada faktor yang mempengaruhi aliran kawalan, yang akan membawa kepada panggilan gopark.

Atas ialah kandungan terperinci 27 sebab mengapa Goroutine hang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:Golang菜鸟
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!