上卷 程序设计
中卷 标准库
- bufio 1.18
- bytes 1.18
- io 1.18
- container 1.18
- encoding 1.18
- crypto 1.18
- hash 1.18
- index 1.18
- sort 1.18
- context 1.18
- database 1.18
- connection
- query
- queryrow
- exec
- prepare
- transaction
- scan & null
- context
- tcp
- udp
- http
- server
- handler
- client
- h2、tls
- url
- rpc
- exec
- signal
- embed 1.18
- plugin 1.18
- reflect 1.18
- runtime 1.18
- KeepAlived
- ReadMemStats
- SetFinalizer
- Stack
- sync 1.18
- atomic
- mutex
- rwmutex
- waitgroup
- cond
- once
- map
- pool
- copycheck
- nocopy
- unsafe 1.18
- fmt 1.18
- log 1.18
- math 1.18
- time 1.18
- timer
下卷 运行时
源码剖析
附录
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
4.5.7 标准库函数
标准库 runtime 里与调度有关的几个函数。
Gosched
与 gopark 的区别在于:会被放回队列,无需 goready 唤醒。
// proc.go // Gosched yields the processor, allowing other goroutines to run. It does not // suspend the current goroutine, so execution resumes automatically. func Gosched() { // mcall 会保存当前 G.sched,并将 G 做为 gosched_m 调用参数。 mcall(gosched_m) }
// Gosched continuation on g0. func gosched_m(gp *g) { goschedImpl(gp) }
func goschedImpl(gp *g) { // 切换状态,并解除 gp 和 MP 的关联。 casgstatus(gp, _Grunning, _Grunnable) dropg() // 将 gp 放入全局队列,等待下次被调度执行。 globrunqput(gp) // 当前 MP 调度其他任务。 schedule() }
Goexit
调用 goexit1,将当前 G 标记为 dead 状态,放回复用列表。
解除和 M 的关联,让其重新进入调度循环。
这意味着立即终止,不会再回到 G 执行,不理会调用堆栈。
在 main goroutine 里调用 Goexit,它会等待其他 goroutine 结束后才会崩溃。
// panic.go // Goexit terminates the goroutine that calls it. No other goroutine is affected. // // Goexit runs all deferred calls before terminating the goroutine. Because Goexit // is not a panic, any recover calls in those deferred functions will return nil. // // Calling Goexit from the main goroutine terminates that goroutine // without func main returning. Since func main has not returned, // the program continues execution of other goroutines. // If all other goroutines exit, the program crashes. func Goexit() { for { ...defer... } goexit1() }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论