扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
本文转载自微信公众号「脑子进煎鱼了」,作者陈煎鱼。转载本文请联系脑子进煎鱼了公众号。

创新互联是一家集网站建设,西城企业网站建设,西城品牌网站建设,网站定制,西城网站建设报价,网络营销,网络优化,西城网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
大家好,我是煎鱼。
上个月面向读者的提问,我们针对 goroutine 泄露中都会看到的大头 runtime.gopark 函数进行了学习和了解,输出了 《Goroutine 一泄露就看到他,这是个什么?》。
有小伙伴提到,虽然我们知道了 runtime.gopark 函数的缘起和内在,但其实没有提到 runtime.gopark 的诱发原因,毕竟他会导致 Goroutine 挂起,这是我们日常编码中需要关注的。
为此我整理了一下笔记,今天这篇文章就和大家一起围观 gopark 的 27 个诱发原因。为了方便阅读,我们会根据分类进行说明。
| 标识 | 含义 |
|---|---|
| waitReasonZero | 无 |
| waitReasonGCAssistMarking | GC assist marking |
| waitReasonIOWait | IO wait |
| 标识 | 含义 |
|---|---|
| waitReasonChanReceiveNilChan | chan receive (nil chan) |
| waitReasonChanSendNilChan | chan send (nil chan) |
| 标识 | 含义 |
|---|---|
| waitReasonDumpingHeap | dumping heap |
| waitReasonGarbageCollection | garbage collection |
| waitReasonGarbageCollectionScan | garbage collection scan |
| 标识 | 含义 |
|---|---|
| waitReasonPanicWait | panicwait |
| waitReasonSelect | select |
| waitReasonSelectNoCases | select (no cases) |
| 标识 | 含义 |
|---|---|
| waitReasonGCAssistWait | GC assist wait |
| waitReasonGCSweepWait | GC sweep wait |
| waitReasonGCScavengeWait | GC scavenge wait |
| 标识 | 含义 |
|---|---|
| waitReasonChanReceive | chan receive |
| waitReasonChanSend | chan send |
| waitReasonFinalizerWait | finalizer wait |
| 标识 | 含义 |
|---|---|
| waitReasonForceGCIdle | force gc (idle) |
| waitReasonSemacquire | semacquire |
| waitReasonSleep | sleep |
| 标识 | 含义 |
|---|---|
| waitReasonSyncCondWait | sync.Cond.Wait |
| waitReasonTimerGoroutineIdle | timer goroutine (idle) |
| waitReasonTraceReaderBlocked | trace reader (blocked) |
| 标识 | 含义 |
|---|---|
| waitReasonWaitForGCCycle | wait for GC cycle |
| waitReasonGCWorkerIdle | GC worker (idle) |
| waitReasonPreempted | preempted |
| waitReasonDebugCall | debug call |
今天这篇文章是对开头 runtime.gopark 函数的详解文章的一个补充,我们能够对此了解到其诱发的因素。
主要场景为:
我们可以根据这些特性,去拆解可能会造成阻塞的原因。其实也就没必要记了,他们会导致阻塞肯定是由于存在影响控制流的因素,才会导致 gopark 的调用。

我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流