AI 与机器学习
会诱发 Goroutine 挂起的 27 个原因
Posts on 煎é±0 次浏览
大家好,我是煎鱼。 上个月面向读者的提问,我们针对 goroutine 泄露中都会看到的大头 runtime.gopark 函数进行了学习和了解,输出了 《Goroutine 一泄露就看到他,这是个什么?》。 有小伙伴提到,虽然我们知道了 runtime.gopark 函数的缘起和内在,但其实没有提到 runtime.gopark 的诱发因素,这是我们日常编码中需要关注的。 今天这篇文章就和大家一起围观 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.
原文:https://eddycjy.com/posts/go/goroutine-27/

