協程--golang

協程(goroutine) 是輕量級的執行線程,由關鍵字go定義

一個例子

package main

import (
    "fmt"
    "time"
)

func f(from string) {
    for i := 0; i < len(from); i++ {
        fmt.Println(from, ":", string(from[i]), time.Now().Format("15:04:05.000"))
        //time.Sleep(time.Second)
    }
}

func f2(from string) {
    for i := 0; i < len(from); i++ {
        fmt.Println(from, ":", string(from[i]), time.Now().Format("15:04:05.000"))
        time.Sleep(time.Second)
    }
}

func main() {
    //go f("direct")
    f("ok")
    go f2("inter")
    go f2("hhh")

    time.Sleep(5 * time.Second) //如果沒有這句話,go運行的兩個f2("inter")和f2("hhh")不會打印語句
}

特別注意:如果沒有time.Sleep(5 * time.Second),不會執行到f2函數,因爲主進程(main函數)已經執行完了

結果


從上圖可以看出

  1. 阻塞執行完f("ok")後,併發執行f2("inter")f2("hhh")
  2. f2("inter")f2("hhh") 同時執行,順序打印字母

一點改動

如果把time.Sleep(5 * time.Second)改成time.Sleep(3* time.Second),從下圖可以看出,“inter”只打印了前三個字母

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章