Golang Go语言协程调度 帮忙翻译理解下
Golang Go语言协程调度 帮忙翻译理解下
是说,如果你循环中没有进行函数调用,那么调度或者垃圾回收时,会有延时 ?
看了上下文,说当函数调用的时候,有协程调度的埋点,这样的话,如果循环中没有函数调用,就不会有调度的延时啊?
It ’ s critically important that function calls happen within reasonable timeframes.
是说,如果函数调用频度要合理,不要过多,也不要过少吗?
更多关于Golang Go语言协程调度 帮忙翻译理解下的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
没有埋点一个协程就会一直占了 P 啊,P 队列上其他的协程就没机会执行了
更多关于Golang Go语言协程调度 帮忙翻译理解下的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
gc 本就是针对变量,函数一类对象的,gc 是有开销的,不会很频繁的执行,字面意思你没翻译错。
调度器发现一个 routine 运行了很久需要暂停的时候, 会给这个 routine 设置一个 flag. 在 function call 的时候, 会去检查这个 flag, 然后决定是否暂停运行.
像 java 里的 GC Pause, 也需要执行到 safepoint 的时候,停止运行, 虽然 go 用的是协程, 但是和这个 GC Pause 也类似
所以给的建议是, 如果很蠢的写了一个 for 循环, 里面都是 i++这种没有发生函数调用, 也不可能阻塞的代码, 这个 routine 会一直跑下去.
https://github.com/golang/proposal/blob/master/design/24543-non-cooperative-preemption.md
Proposal: Non-cooperative goroutine preemption
很可能 1.12 就会实现,所以探讨这些没什么意义,这些知识很快就会过时。
goroutine 不是协程。
关于“Golang Go语言协程调度”的翻译与理解如下:
在Golang(也称为Go语言)中,“协程调度”(Goroutine Scheduling)是一个核心概念。Golang通过引入协程(Goroutine)这一轻量级的线程实现,极大地简化了并发编程的复杂度。
协程(Goroutine):是Go语言中的一种并发体,它非常轻量,可以在很小的栈空间上运行,且由Go运行时(Runtime)自动管理。协程的创建和销毁开销都非常小,因此非常适合处理大量的并发任务。
调度(Scheduling):指的是Go运行时决定何时以及如何将CPU资源分配给各个协程的过程。Go语言的调度器非常智能,它使用M:N的调度模型(即多个协程映射到多个线程上),通过高效的上下文切换来确保所有协程都能公平地获得执行机会。
此外,Go语言的调度器还设计了一系列优化策略,如工作窃取(Work Stealing)算法,以最大化CPU的利用率并减少协程间的等待时间。这些优化使得Go语言在并发编程方面表现出色,能够高效地处理高并发场景。
综上所述,“Golang Go语言协程调度”指的是在Go语言中,Go运行时如何智能地管理和调度各个协程,以确保它们能够高效、公平地共享CPU资源。这是Go语言并发编程的核心机制之一,也是其高性能和易用性的重要保障。