溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

goroutine/Gosched/Goexit/GOMAXPROCS

發布時間:2020-08-10 21:18:09 來源:網絡 閱讀:308 作者:ck_god 欄目:編程語言

goroutine

// 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
        }
    }

}

Goexit >>>

// 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 {
    }
}

Gosched >>>

// 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")
    }
}

GOMAXPROCS >>>

// 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)
    }
}
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女