goroutine/Gosched/Goexit/GOMAXPROCS
发布时间:2021-12-27 编辑:jiaochengji.com
教程集为您提供goroutine/Gosched/Goexit/GOMAXPROCS等资源,欢迎您收藏本站,我们将为您提供最新的goroutine/Gosched/Goexit/GOMAXPROCS资源
<h3>goroutine</h3>
<pre><code class="lang-go hljs">// code_037_concurrency_goroutine project main.go
package main
import (
"fmt"
"time"
)
//并发,concurrency; 并行,parallel;而Go从语言层面就支持了并行,而Go语言提供了自动垃圾回收机制。
//goroutine说到底其实就是协程,执行goroutine只需极少的栈内存(大概是4~5KB),当然会根据相应的数据伸缩
func newTask() {
i := 0
for {
i
fmt.Printf("new gorotine: i= %d\n", i)
time.Sleep(1 * time.Second)
if i == 10 {
break
}
}
}
func main() {
go newTask()
//goroutine>>> 主goroutine退出后,其它的工作goroutine也会自动退出
i := 0
for {
i
fmt.Printf("main goroutine : i =%d\n", i)
time.Sleep(1 * time.Second)
if i == 10 {
break
}
}
}
</code></code></pre>
<h3>Goexit >>></h3>
<pre><code class="lang-go hljs">// code_039_goroutine_runtime_Goexit project main.go
package main
import (
"fmt"
"runtime"
)
//备注:调用 runtime.Goexit() 将立即终止当前 goroutine 执⾏,调度器确保所有已注册 defer延迟调用被执行。
func main() {
go func() {
defer fmt.Println("A.defer")
func() {
defer fmt.Println("B.defer")
runtime.Goexit() // 终止当前 goroutine, import "runtime"
fmt.Println("B") //不会执行
}()
fmt.Println("A") //不会执行
}()
//死循环,目的不让主goroutine结束
for {
}
}
</code></code></pre>
<h3>Gosched >>></h3>
<pre><code class="lang-go hljs">// code_038_goroutine_runtime project main.go
package main
import (
"fmt"
"runtime"
)
func main() {
//runtime包:Gosched()、Goexit()、GOMAXPROCS()
//runtime.Gosched() 用于让出CPU时间片,让出当前goroutine的执行权限,调度器安排其他等待的任务运行,并在下次某个时候从该位置恢复执行。
//调用 runtime.Goexit() 将立即终止当前 goroutine 执行,调度器确保所有已注册 defer延迟调用被执行。
//调用 runtime.GOMAXPROCS() 用来设置可以并行计算的CPU核数的最大值,并返回之前的值。
go func(s string) {
for i := 0; i < 5; i {
fmt.Println(s)
}
}("world")
for i := 0; i < 5; i {
runtime.Gosched()
fmt.Println("Hello")
}
}
</code></code></pre>
<h3>GOMAXPROCS >>></h3>
<pre><code class="lang-go hljs">// code_040_goroutine_runtime_GOMAXPROCS project main.go
package main
import (
"fmt"
"runtime"
)
//调用 runtime.GOMAXPROCS() 用来设置可以并行计算的CPU核数的最大值,并返回之前的值。
func main() {
n := runtime.GOMAXPROCS(1)
// n := runtime.GOMAXPROCS(2)
fmt.Printf("n=%d\n", n)
for {
go fmt.Print(0)
fmt.Print(1)
}
}
</code></code></pre>
到此这篇关于“goroutine/Gosched/Goexit/GOMAXPROCS”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!
到此这篇关于“goroutine/Gosched/Goexit/GOMAXPROCS”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!
您可能感兴趣的文章:
goroutine/Gosched/Goexit/GOMAXPROCS
【golang】Gosched()、Goexit()、GOMAXPROCS
golang 面试题(三)管道chan
go 语言并发
Golang 并发机制
Go语言 goroutine一些常用技巧
也谈goroutine调度器
goroutine与调度器
golang并发原理剖析
golang学习笔记(二)—— 深入golang中的协程
上一篇:golang 数组面试题
下一篇:Golang GC原理
[关闭]