go语言基础(并发--goroutine+channel)

一、Go协程

1、Go协程和Go主线程

  1)Go主线程(有程序员直接称为线程/也可以理解成进程):一个Go线程上,可以起多个协程,你可以这样理解,协程是轻量级的线程[编译器做优化]。

  2)Go协程的特点

    有独立的栈空间

    共享程序堆空间

    调度由用户控制

    协程是轻量级的线程9o线程-协程

2、案例说明

  请编写一个程序,完成如下功能:

    1)在主线程(可以理解成进程)中,开启一个goroutine,该协程每隔1秒输出"hello,world"

    2)在主线程中也每隔一秒输出“hello,golang"”,输出10次后,退出程序

扫描二维码关注公众号,回复: 11378926 查看本文章

    3)要求主线程和goroutine同时执行.

    4)画出主线程和协程执行流程图

package main

import(
    "fmt"
    "strconv"
    "time"
)

func test(){
    fori :=1; i<=10; i++{
    fmt.Println("tesst() hello,world"+strconv.rtoa(i))
    time.sleep(time.second)
}

func main(){
    go test()  ∥开启了一个协程
    for i :=1; i<=10; i++{
        fmt.Print1n("main() he11o,golang"+strconv.rtoa(i))
        time.sleep(time.second)
    }
}

  程序关系示例图

  

3、协程小结

  1)主线程是一个物理线程,直接作用在cpu上的。是重量级的,非常耗费cpu 资源。

  2)协程从主线程开启的,是轻量级的线程,是逻辑态。对资源消耗相对小。

  3)Golang的协程机制是重要的特点,可以轻松的开启上万个协程。其它编程语言的并发机制是一般基于线程的,开启过多的线程,资源耗费大,这里就突显Golang在并发上的优势了

猜你喜欢

转载自www.cnblogs.com/WiseAdministrator/p/13199055.html