您好,登錄后才能下訂單哦!
// code_037_concurrency_goroutine project main.go
package main
import (
"fmt"
"time"
)
//并發(fā),concurrency; 并行,parallel;而Go從語言層面就支持了并行,而Go語言提供了自動垃圾回收機制。
//goroutine說到底其實就是協程,執(zhí)行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_039_goroutine_runtime_Goexit project main.go
package main
import (
"fmt"
"runtime"
)
//備注:調用 runtime.Goexit() 將立即終止當前 goroutine 執(zhí)?,調度器確保所有已注冊 defer延遲調用被執(zhí)行。
func main() {
go func() {
defer fmt.Println("A.defer")
func() {
defer fmt.Println("B.defer")
runtime.Goexit() // 終止當前 goroutine, import "runtime"
fmt.Println("B") //不會執(zhí)行
}()
fmt.Println("A") //不會執(zhí)行
}()
//死循環(huán),目的不讓主goroutine結束
for {
}
}
// code_038_goroutine_runtime project main.go
package main
import (
"fmt"
"runtime"
)
func main() {
//runtime包:Gosched()、Goexit()、GOMAXPROCS()
//runtime.Gosched() 用于讓出CPU時間片,讓出當前goroutine的執(zhí)行權限,調度器安排其他等待的任務運行,并在下次某個時候從該位置恢復執(zhí)行。
//調用 runtime.Goexit() 將立即終止當前 goroutine 執(zhí)行,調度器確保所有已注冊 defer延遲調用被執(zhí)行。
//調用 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_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)
}
}
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。