协程--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”只打印了前三个字母

你可能感兴趣的:(协程--golang)