var runtime.sched
390 uses
runtime (current package)
debug.go#L21: lock(&sched.lock)
debug.go#L23: unlock(&sched.lock)
debugcall.go#L214: lock(&sched.lock)
debugcall.go#L216: unlock(&sched.lock)
mgc.go#L1724: totalCpu := sched.totaltime + (now-sched.procresizetime)*int64(gomaxprocs)
mgc.go#L1987: lock(&sched.lock)
mgc.go#L1995: unlock(&sched.lock)
mgc.go#L2274: lock(&sched.sudoglock)
mgc.go#L2276: for sg = sched.sudogcache; sg != nil; sg = sgnext {
mgc.go#L2280: sched.sudogcache = nil
mgc.go#L2281: unlock(&sched.sudoglock)
mgc.go#L2285: lock(&sched.deferlock)
mgc.go#L2286: for i := range sched.deferpool {
mgc.go#L2290: for d = sched.deferpool[i]; d != nil; d = dlink {
mgc.go#L2294: sched.deferpool[i] = nil
mgc.go#L2296: unlock(&sched.deferlock)
mgcmark.go#L278: lock(&sched.gFree.lock)
mgcmark.go#L279: list := sched.gFree.stack
mgcmark.go#L280: sched.gFree.stack = gList{}
mgcmark.go#L281: unlock(&sched.gFree.lock)
mgcmark.go#L298: lock(&sched.gFree.lock)
mgcmark.go#L299: sched.gFree.noStack.pushAll(q)
mgcmark.go#L300: unlock(&sched.gFree.lock)
mgcmark.go#L1009: for !(gp.preempt && (preemptible || atomic.Load(&sched.gcwaiting) != 0)) {
mgcmark.go#L1023: for !(gp.preempt && (preemptible || atomic.Load(&sched.gcwaiting) != 0)) {
panic.go#L398: if len(pp.deferpool[sc]) == 0 && sched.deferpool[sc] != nil {
panic.go#L402: lock(&sched.deferlock)
panic.go#L403: for len(pp.deferpool[sc]) < cap(pp.deferpool[sc])/2 && sched.deferpool[sc] != nil {
panic.go#L404: d := sched.deferpool[sc]
panic.go#L405: sched.deferpool[sc] = d.link
panic.go#L409: unlock(&sched.deferlock)
panic.go#L471: lock(&sched.deferlock)
panic.go#L472: last.link = sched.deferpool[sc]
panic.go#L473: sched.deferpool[sc] = first
panic.go#L474: unlock(&sched.deferlock)
proc.go#L143: atomic.Store(&sched.sysmonStarting, 1)
proc.go#L364: lock(&sched.sudoglock)
proc.go#L366: for len(pp.sudogcache) < cap(pp.sudogcache)/2 && sched.sudogcache != nil {
proc.go#L367: s := sched.sudogcache
proc.go#L368: sched.sudogcache = s.next
proc.go#L372: unlock(&sched.sudoglock)
proc.go#L430: lock(&sched.sudoglock)
proc.go#L431: last.next = sched.sudogcache
proc.go#L432: sched.sudogcache = first
proc.go#L433: unlock(&sched.sudoglock)
proc.go#L601: lockInit(&sched.lock, lockRankSched)
proc.go#L602: lockInit(&sched.sysmonlock, lockRankSysmon)
proc.go#L603: lockInit(&sched.deferlock, lockRankDefer)
proc.go#L604: lockInit(&sched.sudoglock, lockRankSudog)
proc.go#L628: sched.maxmcount = 10000
proc.go#L652: lock(&sched.lock)
proc.go#L653: sched.lastpoll = uint64(nanotime())
proc.go#L661: unlock(&sched.lock)
proc.go#L697: assertLockHeld(&sched.lock)
proc.go#L699: if mcount() > sched.maxmcount {
proc.go#L700: print("runtime: program exceeds ", sched.maxmcount, "-thread limit\n")
proc.go#L710: assertLockHeld(&sched.lock)
proc.go#L712: if sched.mnext+1 < sched.mnext {
proc.go#L715: id := sched.mnext
proc.go#L716: sched.mnext++
proc.go#L730: lock(&sched.lock)
proc.go#L756: unlock(&sched.lock)
proc.go#L812: sched.stopwait = freezeStopWait
proc.go#L813: atomic.Store(&sched.gcwaiting, 1)
proc.go#L1082: lock(&sched.lock)
proc.go#L1083: sched.stopwait = gomaxprocs
proc.go#L1084: atomic.Store(&sched.gcwaiting, 1)
proc.go#L1088: sched.stopwait--
proc.go#L1098: sched.stopwait--
proc.go#L1108: sched.stopwait--
proc.go#L1110: wait := sched.stopwait > 0
proc.go#L1111: unlock(&sched.lock)
proc.go#L1117: if notetsleep(&sched.stopnote, 100*1000) {
proc.go#L1118: noteclear(&sched.stopnote)
proc.go#L1127: if sched.stopwait != 0 {
proc.go#L1159: lock(&sched.lock)
proc.go#L1167: sched.gcwaiting = 0
proc.go#L1168: if sched.sysmonwait != 0 {
proc.go#L1169: sched.sysmonwait = 0
proc.go#L1170: notewakeup(&sched.sysmonnote)
proc.go#L1172: unlock(&sched.lock)
proc.go#L1375: lock(&sched.lock)
proc.go#L1376: sched.nmfreed++
proc.go#L1378: unlock(&sched.lock)
proc.go#L1397: lock(&sched.lock)
proc.go#L1416: m.freelink = sched.freem
proc.go#L1417: sched.freem = m
proc.go#L1419: unlock(&sched.lock)
proc.go#L1428: lock(&sched.lock)
proc.go#L1429: sched.nmfreed++
proc.go#L1431: unlock(&sched.lock)
proc.go#L1473: lock(&sched.lock)
proc.go#L1474: if sched.safePointWait != 0 {
proc.go#L1477: sched.safePointWait = gomaxprocs - 1
proc.go#L1478: sched.safePointFn = fn
proc.go#L1494: for p := sched.pidle.ptr(); p != nil; p = p.link.ptr() {
proc.go#L1497: sched.safePointWait--
proc.go#L1501: wait := sched.safePointWait > 0
proc.go#L1502: unlock(&sched.lock)
proc.go#L1528: if notetsleep(&sched.safePointNote, 100*1000) {
proc.go#L1529: noteclear(&sched.safePointNote)
proc.go#L1535: if sched.safePointWait != 0 {
proc.go#L1544: lock(&sched.lock)
proc.go#L1545: sched.safePointFn = nil
proc.go#L1546: unlock(&sched.lock)
proc.go#L1571: for atomic.Load(&sched.sysmonStarting) != 0 {
proc.go#L1649: lock(&sched.lock)
proc.go#L1650: if atomic.Load(&sched.sysmonwait) != 0 {
proc.go#L1651: atomic.Store(&sched.sysmonwait, 0)
proc.go#L1652: notewakeup(&sched.sysmonnote)
proc.go#L1654: unlock(&sched.lock)
proc.go#L1691: sched.safePointFn(p)
proc.go#L1692: lock(&sched.lock)
proc.go#L1693: sched.safePointWait--
proc.go#L1694: if sched.safePointWait == 0 {
proc.go#L1695: notewakeup(&sched.safePointNote)
proc.go#L1697: unlock(&sched.lock)
proc.go#L1729: if sched.freem != nil {
proc.go#L1730: lock(&sched.lock)
proc.go#L1732: for freem := sched.freem; freem != nil; {
proc.go#L1748: sched.freem = newList
proc.go#L1749: unlock(&sched.lock)
proc.go#L1868: atomic.Xadd(&sched.ngsys, -1)
proc.go#L1919: gp.goid = int64(atomic.Xadd64(&sched.goidgen, 1))
proc.go#L1930: atomic.Xadd(&sched.ngsys, +1)
proc.go#L1971: atomic.Xadd(&sched.ngsys, +1)
proc.go#L2212: lock(&sched.lock)
proc.go#L2213: sched.nmsys++
proc.go#L2215: unlock(&sched.lock)
proc.go#L2254: lock(&sched.lock)
proc.go#L2256: unlock(&sched.lock)
proc.go#L2296: lock(&sched.lock)
proc.go#L2300: unlock(&sched.lock)
proc.go#L2304: if int32(atomic.Xadd(&sched.nmspinning, -1)) < 0 {
proc.go#L2327: unlock(&sched.lock)
proc.go#L2340: unlock(&sched.lock)
proc.go#L2367: if !runqempty(_p_) || sched.runqsize != 0 {
proc.go#L2378: if atomic.Load(&sched.nmspinning)+atomic.Load(&sched.npidle) == 0 && atomic.Cas(&sched.nmspinning, 0, 1) { // TODO: fast atomic
proc.go#L2382: lock(&sched.lock)
proc.go#L2383: if sched.gcwaiting != 0 {
proc.go#L2385: sched.stopwait--
proc.go#L2386: if sched.stopwait == 0 {
proc.go#L2387: notewakeup(&sched.stopnote)
proc.go#L2389: unlock(&sched.lock)
proc.go#L2393: sched.safePointFn(_p_)
proc.go#L2394: sched.safePointWait--
proc.go#L2395: if sched.safePointWait == 0 {
proc.go#L2396: notewakeup(&sched.safePointNote)
proc.go#L2399: if sched.runqsize != 0 {
proc.go#L2400: unlock(&sched.lock)
proc.go#L2406: if sched.npidle == uint32(gomaxprocs-1) && atomic.Load64(&sched.lastpoll) != 0 {
proc.go#L2407: unlock(&sched.lock)
proc.go#L2416: unlock(&sched.lock)
proc.go#L2426: if atomic.Load(&sched.npidle) == 0 {
proc.go#L2430: if atomic.Load(&sched.nmspinning) != 0 || !atomic.Cas(&sched.nmspinning, 0, 1) {
proc.go#L2488: if sched.gcwaiting == 0 {
proc.go#L2495: if int32(atomic.Xadd(&sched.nmspinning, -1)) < 0 {
proc.go#L2500: lock(&sched.lock)
proc.go#L2502: sched.stopwait--
proc.go#L2503: if sched.stopwait == 0 {
proc.go#L2504: notewakeup(&sched.stopnote)
proc.go#L2506: unlock(&sched.lock)
proc.go#L2535: hz := sched.profilehz
proc.go#L2563: if sched.gcwaiting != 0 {
proc.go#L2588: if sched.runqsize != 0 {
proc.go#L2589: lock(&sched.lock)
proc.go#L2591: unlock(&sched.lock)
proc.go#L2604: if netpollinited() && atomic.Load(&netpollWaiters) > 0 && atomic.Load64(&sched.lastpoll) != 0 {
proc.go#L2622: if !_g_.m.spinning && 2*atomic.Load(&sched.nmspinning) >= procs-atomic.Load(&sched.npidle) {
proc.go#L2627: atomic.Xadd(&sched.nmspinning, 1)
proc.go#L2634: if sched.gcwaiting != 0 {
proc.go#L2741: lock(&sched.lock)
proc.go#L2742: if sched.gcwaiting != 0 || _p_.runSafePointFn != 0 {
proc.go#L2743: unlock(&sched.lock)
proc.go#L2746: if sched.runqsize != 0 {
proc.go#L2748: unlock(&sched.lock)
proc.go#L2755: unlock(&sched.lock)
proc.go#L2773: if int32(atomic.Xadd(&sched.nmspinning, -1)) < 0 {
proc.go#L2781: lock(&sched.lock)
proc.go#L2783: unlock(&sched.lock)
proc.go#L2788: atomic.Xadd(&sched.nmspinning, 1)
proc.go#L2830: lock(&sched.lock)
proc.go#L2847: unlock(&sched.lock)
proc.go#L2852: atomic.Xadd(&sched.nmspinning, 1)
proc.go#L2867: if netpollinited() && (atomic.Load(&netpollWaiters) > 0 || pollUntil != 0) && atomic.Xchg64(&sched.lastpoll, 0) != 0 {
proc.go#L2868: atomic.Store64(&sched.pollUntil, uint64(pollUntil))
proc.go#L2880: atomic.Store64(&sched.pollUntil, 0)
proc.go#L2881: atomic.Store64(&sched.lastpoll, uint64(nanotime()))
proc.go#L2888: lock(&sched.lock)
proc.go#L2890: unlock(&sched.lock)
proc.go#L2906: atomic.Xadd(&sched.nmspinning, 1)
proc.go#L2911: pollerPollUntil := int64(atomic.Load64(&sched.pollUntil))
proc.go#L2925: if sched.runqsize != 0 {
proc.go#L2932: if netpollinited() && atomic.Load(&netpollWaiters) > 0 && sched.lastpoll != 0 {
proc.go#L2945: if atomic.Load64(&sched.lastpoll) == 0 {
proc.go#L2950: pollerPollUntil := int64(atomic.Load64(&sched.pollUntil))
proc.go#L2969: nmspinning := atomic.Xadd(&sched.nmspinning, -1)
proc.go#L3015: for ; n != 0 && sched.npidle != 0; n-- {
proc.go#L3022: lock(&sched.lock)
proc.go#L3024: unlock(&sched.lock)
proc.go#L3029: npidle := int(atomic.Load(&sched.npidle))
proc.go#L3037: lock(&sched.lock)
proc.go#L3039: unlock(&sched.lock)
proc.go#L3073: if sched.gcwaiting != 0 {
proc.go#L3113: if _g_.m.p.ptr().schedtick%61 == 0 && sched.runqsize > 0 {
proc.go#L3114: lock(&sched.lock)
proc.go#L3116: unlock(&sched.lock)
proc.go#L3135: if sched.disable.user && !schedEnabled(gp) {
proc.go#L3139: lock(&sched.lock)
proc.go#L3143: unlock(&sched.lock)
proc.go#L3145: sched.disable.runnable.pushBack(gp)
proc.go#L3146: sched.disable.n++
proc.go#L3147: unlock(&sched.lock)
proc.go#L3285: lock(&sched.lock)
proc.go#L3287: unlock(&sched.lock)
proc.go#L3381: atomic.Xadd(&sched.ngsys, -1)
proc.go#L3532: if atomic.Load(&sched.sysmonwait) != 0 {
proc.go#L3550: if sched.gcwaiting != 0 {
proc.go#L3569: lock(&sched.lock)
proc.go#L3570: if atomic.Load(&sched.sysmonwait) != 0 {
proc.go#L3571: atomic.Store(&sched.sysmonwait, 0)
proc.go#L3572: notewakeup(&sched.sysmonnote)
proc.go#L3574: unlock(&sched.lock)
proc.go#L3581: lock(&sched.lock)
proc.go#L3582: if sched.stopwait > 0 && atomic.Cas(&_p_.status, _Psyscall, _Pgcstop) {
proc.go#L3588: if sched.stopwait--; sched.stopwait == 0 {
proc.go#L3589: notewakeup(&sched.stopnote)
proc.go#L3592: unlock(&sched.lock)
proc.go#L3693: if sched.disable.user && !schedEnabled(_g_) {
proc.go#L3736: if sched.stopwait == freezeStopWait {
proc.go#L3749: if sched.pidle != 0 {
proc.go#L3795: lock(&sched.lock)
proc.go#L3797: if _p_ != nil && atomic.Load(&sched.sysmonwait) != 0 {
proc.go#L3798: atomic.Store(&sched.sysmonwait, 0)
proc.go#L3799: notewakeup(&sched.sysmonnote)
proc.go#L3801: unlock(&sched.lock)
proc.go#L3818: lock(&sched.lock)
proc.go#L3825: } else if atomic.Load(&sched.sysmonwait) != 0 {
proc.go#L3826: atomic.Store(&sched.sysmonwait, 0)
proc.go#L3827: notewakeup(&sched.sysmonnote)
proc.go#L3829: unlock(&sched.lock)
proc.go#L4075: atomic.Xadd(&sched.ngsys, +1)
proc.go#L4083: _p_.goidcache = atomic.Xadd64(&sched.goidgen, _GoidCacheBatch)
proc.go#L4154: lock(&sched.gFree.lock)
proc.go#L4159: sched.gFree.noStack.push(gp)
proc.go#L4161: sched.gFree.stack.push(gp)
proc.go#L4163: sched.gFree.n++
proc.go#L4165: unlock(&sched.gFree.lock)
proc.go#L4173: if _p_.gFree.empty() && (!sched.gFree.stack.empty() || !sched.gFree.noStack.empty()) {
proc.go#L4174: lock(&sched.gFree.lock)
proc.go#L4178: gp := sched.gFree.stack.pop()
proc.go#L4180: gp = sched.gFree.noStack.pop()
proc.go#L4185: sched.gFree.n--
proc.go#L4189: unlock(&sched.gFree.lock)
proc.go#L4216: lock(&sched.gFree.lock)
proc.go#L4221: sched.gFree.noStack.push(gp)
proc.go#L4223: sched.gFree.stack.push(gp)
proc.go#L4225: sched.gFree.n++
proc.go#L4227: unlock(&sched.gFree.lock)
proc.go#L4340: n := int32(atomic.Loaduintptr(&allglen)) - sched.gFree.n - int32(atomic.Load(&sched.ngsys))
proc.go#L4354: return int32(sched.mnext - sched.nmfreed)
proc.go#L4628: lock(&sched.lock)
proc.go#L4629: sched.profilehz = hz
proc.go#L4630: unlock(&sched.lock)
proc.go#L4684: assertLockHeld(&sched.lock)
proc.go#L4777: assertLockHeld(&sched.lock)
proc.go#L4790: if sched.procresizetime != 0 {
proc.go#L4791: sched.totaltime += int64(old) * (now - sched.procresizetime)
proc.go#L4793: sched.procresizetime = now
proc.go#L4977: lock(&sched.lock)
proc.go#L4978: sched.nmidlelocked += v
proc.go#L4982: unlock(&sched.lock)
proc.go#L4989: assertLockHeld(&sched.lock)
proc.go#L5020: run := mcount() - sched.nmidle - sched.nmidlelocked - sched.nmsys
proc.go#L5025: print("runtime: checkdead: nmidle=", sched.nmidle, " nmidlelocked=", sched.nmidlelocked, " mcount=", mcount(), " nmsys=", sched.nmsys, "\n")
proc.go#L5050: unlock(&sched.lock) // unlock so that GODEBUG=scheddetail=1 doesn't hang
proc.go#L5059: for pp := &sched.pidle; *pp != 0; pp = &(*pp).ptr().link {
proc.go#L5085: unlock(&sched.lock) // unlock so that GODEBUG=scheddetail=1 doesn't hang
proc.go#L5100: lock(&sched.lock)
proc.go#L5101: sched.nmsys++
proc.go#L5103: unlock(&sched.lock)
proc.go#L5107: atomic.Store(&sched.sysmonStarting, 0)
proc.go#L5141: if debug.schedtrace <= 0 && (sched.gcwaiting != 0 || atomic.Load(&sched.npidle) == uint32(gomaxprocs)) {
proc.go#L5142: lock(&sched.lock)
proc.go#L5143: if atomic.Load(&sched.gcwaiting) != 0 || atomic.Load(&sched.npidle) == uint32(gomaxprocs) {
proc.go#L5147: atomic.Store(&sched.sysmonwait, 1)
proc.go#L5148: unlock(&sched.lock)
proc.go#L5159: syscallWake = notetsleep(&sched.sysmonnote, sleep)
proc.go#L5164: lock(&sched.lock)
proc.go#L5165: atomic.Store(&sched.sysmonwait, 0)
proc.go#L5166: noteclear(&sched.sysmonnote)
proc.go#L5173: unlock(&sched.lock)
proc.go#L5176: lock(&sched.sysmonlock)
proc.go#L5186: lastpoll := int64(atomic.Load64(&sched.lastpoll))
proc.go#L5188: atomic.Cas64(&sched.lastpoll, uint64(lastpoll), uint64(now))
proc.go#L5248: unlock(&sched.sysmonlock)
proc.go#L5305: if runqempty(_p_) && atomic.Load(&sched.nmspinning)+atomic.Load(&sched.npidle) > 0 && pd.syscallwhen+10*1000*1000 > now {
proc.go#L5395: lock(&sched.lock)
proc.go#L5396: print("SCHED ", (now-starttime)/1e6, "ms: gomaxprocs=", gomaxprocs, " idleprocs=", sched.npidle, " threads=", mcount(), " spinningthreads=", sched.nmspinning, " idlethreads=", sched.nmidle, " runqueue=", sched.runqsize)
proc.go#L5398: print(" gcwaiting=", sched.gcwaiting, " nmidlelocked=", sched.nmidlelocked, " stopwait=", sched.stopwait, " sysmonwait=", sched.sysmonwait, "\n")
proc.go#L5428: unlock(&sched.lock)
proc.go#L5467: unlock(&sched.lock)
proc.go#L5476: lock(&sched.lock)
proc.go#L5477: if sched.disable.user == !enable {
proc.go#L5478: unlock(&sched.lock)
proc.go#L5481: sched.disable.user = !enable
proc.go#L5483: n := sched.disable.n
proc.go#L5484: sched.disable.n = 0
proc.go#L5485: globrunqputbatch(&sched.disable.runnable, n)
proc.go#L5486: unlock(&sched.lock)
proc.go#L5487: for ; n != 0 && sched.npidle != 0; n-- {
proc.go#L5491: unlock(&sched.lock)
proc.go#L5500: assertLockHeld(&sched.lock)
proc.go#L5502: if sched.disable.user {
proc.go#L5513: assertLockHeld(&sched.lock)
proc.go#L5515: mp.schedlink = sched.midle
proc.go#L5516: sched.midle.set(mp)
proc.go#L5517: sched.nmidle++
proc.go#L5526: assertLockHeld(&sched.lock)
proc.go#L5528: mp := sched.midle.ptr()
proc.go#L5530: sched.midle = mp.schedlink
proc.go#L5531: sched.nmidle--
proc.go#L5541: assertLockHeld(&sched.lock)
proc.go#L5543: sched.runq.pushBack(gp)
proc.go#L5544: sched.runqsize++
proc.go#L5552: assertLockHeld(&sched.lock)
proc.go#L5554: sched.runq.push(gp)
proc.go#L5555: sched.runqsize++
proc.go#L5562: assertLockHeld(&sched.lock)
proc.go#L5564: sched.runq.pushBackAll(*batch)
proc.go#L5565: sched.runqsize += n
proc.go#L5572: assertLockHeld(&sched.lock)
proc.go#L5574: if sched.runqsize == 0 {
proc.go#L5578: n := sched.runqsize/gomaxprocs + 1
proc.go#L5579: if n > sched.runqsize {
proc.go#L5580: n = sched.runqsize
proc.go#L5589: sched.runqsize -= n
proc.go#L5591: gp := sched.runq.pop()
proc.go#L5594: gp1 := sched.runq.pop()
proc.go#L5674: assertLockHeld(&sched.lock)
proc.go#L5681: _p_.link = sched.pidle
proc.go#L5682: sched.pidle.set(_p_)
proc.go#L5683: atomic.Xadd(&sched.npidle, 1) // TODO: fast atomic
proc.go#L5693: assertLockHeld(&sched.lock)
proc.go#L5695: _p_ := sched.pidle.ptr()
proc.go#L5700: sched.pidle = _p_.link
proc.go#L5701: atomic.Xadd(&sched.npidle, -1) // TODO: fast atomic
proc.go#L5807: lock(&sched.lock)
proc.go#L5809: unlock(&sched.lock)
proc.go#L5841: lock(&sched.lock)
proc.go#L5843: unlock(&sched.lock)
proc.go#L6057: lock(&sched.lock)
proc.go#L6058: out = int(sched.maxmcount)
proc.go#L6060: sched.maxmcount = 0x7fffffff
proc.go#L6062: sched.maxmcount = int32(in)
proc.go#L6065: unlock(&sched.lock)
proc.go#L6137: if i >= active_spin || ncpu <= 1 || gomaxprocs <= int32(sched.npidle+sched.nmspinning)+1 {
runtime2.go#L1059: sched schedt
trace.go#L192: lock(&sched.sysmonlock)
trace.go#L203: unlock(&sched.sysmonlock)
trace.go#L275: unlock(&sched.sysmonlock)
trace.go#L289: lock(&sched.sysmonlock)
trace.go#L296: unlock(&sched.sysmonlock)
trace.go#L334: unlock(&sched.sysmonlock)
 |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |