今天这篇文章就和大家一起围观 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 |
runtime.SetFinalizer
函数来为一个对象设置一个终结者函数。这个行为对应着结束阶段造成的回收。标识 | 含义 |
---|---|
waitReasonForceGCIdle | force gc (idle) |
waitReasonSemacquire | semacquire |
waitReasonSleep | sleep |
标识 | 含义 |
---|---|
waitReasonSyncCondWait | sync.Cond.Wait |
waitReasonTimerGoroutineIdle | timer goroutine (idle) |
waitReasonTraceReaderBlocked | trace reader (blocked) |
sync.Cond
用法能知道,是在调用 sync.Wait
方法时所触发。标识 | 含义 |
---|---|
waitReasonWaitForGCCycle | wait for GC cycle |
waitReasonGCWorkerIdle | GC worker (idle) |
waitReasonPreempted | preempted |
waitReasonDebugCall | debug call |
今天这篇文章是对开头 runtime.gopark 函数的详解文章的一个补充,我们能够对此了解到其诱发的因素。
主要场景为:
我们可以根据这些特性,去拆解可能会造成阻塞的原因。其实也就没必要记了,他们会导致阻塞肯定是由于存在影响控制流的因素,才会导致 gopark 的调用。
以上就是会诱发 Goroutine 挂起的 27 个原因的详细内容,更多请关注php中文网其它相关文章!
已抢186290个
抢已抢67166个
抢已抢352808个
抢已抢666856个
抢已抢121739个
抢已抢22665个
抢