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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容