加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

会诱发 Goroutine 挂 起的 27个因素

发布时间:2022-11-24 12:50:45 所属栏目:语言 来源:
导读:  上个月面向读者的提问,我们针对 goroutine 泄露中都会看到的大头 runtime.gopark 函数进行了学习和了解,输出了 《Goroutine 一泄露就看到他,这是个什么?》。
  
  有小伙伴提到,虽然我们知道了 runtim
  上个月面向读者的提问,我们针对 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 清扫阶段中的结束行为,会触发。
 

(编辑:财气旺网 - 财气网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!