站长网 语言 会诱发 Goroutine 挂起的 27个因素

会诱发 Goroutine 挂起的 27个因素

上个月面向读者的提问,我们针对 goroutine 泄露中都会看到的大头 runtime.gopark 函数进行了学习和了解,输出了 《Goroutine 一泄露就看到他,这是个什么?》。 有小伙伴提到,虽然我们知道了 runtime.gopark 函数的缘起和内在,但其实没有提到 runtime.gop

上个月面向读者的提问,我们针对 goroutine 泄露中都会看到的大头 runtime.gopark 函数进行了学习和了解,输出了 《Goroutine 一泄露就看到他,这是个什么?》。
 
有小伙伴提到,虽然我们知道了 runtime.gopark 函数的缘起和内在,但其实没有提到 runtime.gopark 的诱发原因,毕竟他会导致 Goroutine 挂起,这是我们日常编码中需要关注的。
 
为此我整理了一下笔记,今天这篇文章就和大家一起围观 gopark 的 27 个诱发原因。为了方便阅读,我们会根据分类进行说明。
 
第一部分
标识 含义
waitReasonZero 无
waitReasonGCAssistMarking GC assist marking
waitReasonIOWait IO wait
waitReasonZero:无正式解释,从使用情况来看。主要在 sleep 和 lock 的 2 个场景中使用。
waitReasonGCAssistMarking:GC 辅助标记阶段会使得阻塞等待。
waitReasonIOWait:IO 阻塞等待时,例如:网络请求等。
 
第二部分
标识 含义
waitReasonChanReceiveNilChan chan receive (nil chan)
waitReasonChanSendNilChan chan send (nil chan)
waitReasonChanReceiveNilChan:对未初始化的 channel 进行读操作。
waitReasonChanSendNilChan:对未初始化的 channel 进行写操作。
第三部分
标识 含义
waitReasonDumpingHeap dumping heap
waitReasonGarbageCollection garbage collection
waitReasonGarbageCollectionScan garbage collection scan
waitReasonDumpingHeap:对 Go Heap 堆 dump 时,这个的使用场景仅在 runtime.debug 时,也就是常见的 pprof 这一类采集时阻塞。
waitReasonGarbageCollection:在垃圾回收时,主要场景是 GC 标记终止(GC Mark Termination)阶段时触发。
waitReasonGarbageCollectionScan:在垃圾回收扫描时,主要场景是 GC 标记(GC Mark)扫描 Root 阶段时触发。
第四部分
标识 含义
waitReasonPanicWait panicwait
waitReasonSelect select
waitReasonSelectNoCases select (no cases)
waitReasonPanicWait:在 main goroutine 发生 panic 时,会触发。
waitReasonSelect:在调用关键字 select 时会触发。
waitReasonSelectNoCases:在调用关键字 select 时,若一个 case 都没有,会直接触发。
第五部分
标识 含义
waitReasonGCAssistWait GC assist wait
waitReasonGCSweepWait GC sweep wait
waitReasonGCScavengeWait GC scavenge wait
waitReasonGCAssistWait:GC 辅助标记阶段中的结束行为,会触发。
waitReasonGCSweepWait:GC 清扫阶段中的结束行为,会触发。
会诱发 Goroutine 挂起的 27个因素

本文来自网络,不代表站长网立场,转载请注明出处:https://www.zwzz.com.cn/html/biancheng/yuyan/2021/1106/20374.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部